簡體   English   中英

用戶登錄laravel 5.2時如何獲取api_token

[英]How to get api_token when user login in laravel 5.2

我正在使用令牌保護來使用在發布請求中傳遞的 api_token 對用戶進行身份驗證。 但是我無法使用令牌保護保護來檢索 api_token。 我認為讓用戶從retrieveByCredentials($credentials) ,並檢查使用密碼validateCredentials($user, $credentials)這是在EloquentUserProvider.php ,但訪問他們,我必須使用Auth::guard('api')->provider其中 provider 是受保護的財產。 所以我必須手動執行此操作。 有沒有什么簡單的程序可以在實現登錄時獲取 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
            ]
        ]);
    }

注意:我使用了 provider,但我不能使用它,因為它是受保護的屬性。

在 Laravel 5.2 中,有 2 個身份驗證守衛'web''api' ,如您所知,它們分別在SessionGuardTokenGuard中實現。

TokenGuard沒有使用電子郵件和密碼檢查驗證的模塊,它僅使用api_token檢查有效性。 但是SessionGuard可以; attempt()方法。

所以我們只能使用 web 防護來登錄,並且可以使用'auth:api'中間件用於其他 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' => 200
            ]
        ]);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM