![](/img/trans.png)
[英]NotFoundHttpException while using api_token based authentication in laravel 5.2
[英]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'
,如您所知,它們分別在SessionGuard
和TokenGuard
中實現。
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.