Kei*_*DOG 2 laravel laravel-passport laravel-5.4
我正在使用Laravel 5.4和Passport4。我只想使用First-Party-App。因此,正如该答案所建议的那样,我想避免将ClientID和ClientSecret放入应用程序中。我输入了以下boot()方法AuthServiceProvider :
Passport::routes();
Passport::tokensExpireIn(Carbon::now()->addDays(30));
Passport::refreshTokensExpireIn(Carbon::now()->addDays(60));
Run Code Online (Sandbox Code Playgroud)
我添加了自己的路线api.php以接受来自App的登录:
Route::post('login', 'Auth\LoginController@apiLogin');
Run Code Online (Sandbox Code Playgroud)
这是我的动作:
public function apiLogin(Request $request)
{
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials)) {
// Authentication passed...
$user = Auth::user();
$token = $user->createToken('API Access')->accessToken;
return response()->json(["token_type" =>"Bearer","expires_in" => 2592000,"access_token" => $token]);
}
return response()->json(["error" => "invalid_credentials", "message" => "The user credentials were incorrect."], 401);
}
Run Code Online (Sandbox Code Playgroud)
是否有任何方法可以检索expires_in(30天=> 2592000s)的秒数或日期时间,以便我可以自动进行计算?
这是我设法从对象中获取它的方法:
正如Tim Lewis在评论中指出的那样,有一个$ token属性,$user->createToken('API Access')是一个Laravel\Passport\PersonalAccessTokenResult包含2个公共属性的对象:$accessToken (String)和$token (Laravel\Passport\Token)。因此,我使用获得令牌,$objToken = $user->createToken('API Access');并使用来计算以秒为单位的到期时间$expiration = $objToken->token->expires_at->diffInSeconds(Carbon::now());。这是最终代码:
public function apiLogin(Request $request)
{
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials)) {
// Authentication passed...
Passport::tokensExpireIn(Carbon::now()->addDays(30));
Passport::refreshTokensExpireIn(Carbon::now()->addDays(60));
$user = Auth::user();
$objToken = $user->createToken('API Access');
$strToken = $objToken->accessToken;
$expiration = $objToken->token->expires_at->diffInSeconds(Carbon::now());
return response()->json(["token_type" => "Bearer", "expires_in" => $expiration, "access_token" => $strToken]);
}
return response()->json(["error" => "invalid_credentials", "message" => "The user credentials were incorrect."], 401);
}
Run Code Online (Sandbox Code Playgroud)
但请注意,如果在AuthServiceProvider boot()中使用这两行:
Passport::tokensExpireIn(Carbon::now()->addDays(30));
Passport::refreshTokensExpireIn(Carbon::now()->addDays(60));
Run Code Online (Sandbox Code Playgroud)
因为根据本Laravel护照问题,它不会用Laravel 5.4的密码授予类型中的个人访问令牌代替到期。
| 归档时间: |
|
| 查看次数: |
6625 次 |
| 最近记录: |