2016-07-21 3 views
3

Я использую token guard для аутентификации пользователей с помощью api_token, переданного в почтовом запросе. Но я не могу получить api_token с помощью защиты маркера. Я думал получить пользователя от retrieveByCredentials($credentials) и проверить пароль с помощью validateCredentials($user, $credentials), которые находятся в EloquentUserProvider.php, но для их доступа я должен использовать Auth::guard('api')->provider, где поставщик является защищенным свойством. Поэтому я должен сделать это вручную. Есть ли простая процедура для получения api_token при входе в систему.Как получить api_token при входе пользователя в laravel 5.2

Мой метод Войти в AuthController.php

public function api_login(Request $request) 
    { 
     $validator = Validator::make($request->all(), ['email' => 'required', 'password' => 'required']); 

     $credentials = $this->getCredentials($request); 

     $user = Auth::guard('api')->provider->retrieveByCredentials($credentials); 
     if(is_null($user)) { 
      return response()->json([ 
       'error' => [ 
        'message' => 'Your email is not registered yet', 
        'status_code' => 40 
       ] 
      ]); 
     } elseif(Auth::guard('api')->provider->validateCredentials($user, $credentials)) { 
      return response()->json([ 
       'success' => [ 
        'api_token' => Auth::guard('api')->user()->api_token, 
        'message' => 'Login successful', 
        'status_code' => 200 
       ] 
      ]); 
     } 
     return response()->json([ 
      'error' => [ 
       'message' => 'Login failed', 
       'status_code' => 20 
      ] 
     ]); 
    } 

Примечание: Я использовал провайдера, но я не могу использовать, что, как это защищенное свойство.

ответ

0

В Laravel 5.2 есть 2 аутентификационных защитника 'web' и 'api', они реализованы в SessionGuard и TokenGuard соответственно, как вы знаете.

У TokenGuard нет модулей для проверки валидации по электронной почте и паролю, проверка проверки выполняется только с помощью api_token. Но SessionGuard делает; try().

Таким образом, мы можем использовать веб-охранник только для входа, а другой api, вы можете использовать промежуточное ПО 'auth: api' для другого apis.

Здесь находится функция входа, которая может быть легко реализована.

public function api_login(Request $request) 
{ 
    $validator = Validator::make($request->all(), ['email' => 'required', 'password' => 'required']); 

    $credentials = $this->getCredentials($request); 

    // only web guard can validate with credentials 
    $guard = Auth::guard('web'); 

    if ($guard->attempt($credentials)) { 

     // maybe you can generate api_token again here 

     return response()->json([ 
      'success' => [ 
       'api_token' => $guard->user()->api_token, 
       'message' => 'Login successful', 
       'status_code' => 200 
      ] 
     ]); 
    } 
    else { 
     return response()->json([ 
      'error' => [ 
       'message' => 'Login failed', 
       'status_code' => 20 
      ] 
     ]); 
    } 
} 
Смежные вопросы