2016-07-21 2 views
3

게시 요청에 전달 된 api_token을 사용하여 사용자를 인증하는 데 토큰 가드를 사용하고 있습니다. 하지만 토큰 가드 가드를 사용하여 api_token을 검색 할 수 없습니다. 내가 retrieveByCredentials($credentials)에서 사용자를 얻고 EloquentUserProvider.php에있는 validateCredentials($user, $credentials)을 사용하여 비밀번호를 확인했지만 액세스하려면 Auth::guard('api')->provider 제공자가 보호 속성 인 곳을 사용해야합니다. 그래서 저는 그것을 수동으로해야합니다. 로그인이 구현 될 때 api_token을 가져 오는 간단한 절차가 있습니까?사용자가 laravel 5.2에 로그인 할 때 api_token을 얻는 방법

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에는 인증 가드 인 'web'과 'api'가 2 개 있으며, 각각 SessionGuard와 TokenGuard에 구현되어 있습니다.

TokenGuard에는 이메일 및 비밀번호로 확인을 확인하는 모듈이 없으므로 api_token을 사용하여 유효성 만 검사합니다. 하지만 SessionGuard는 않습니다. 시도() 메소드.

우리는 로그인 전용 웹 가드를 사용할 수 있으며 다른 API는 다른 api 용으로 'auth : api'미들웨어를 사용할 수 있습니다.

여기에 쉽게 구현할 수있는 로그인 기능이 있습니다.

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 
      ] 
     ]); 
    } 
} 
관련 문제