首先,让我承认我是API的新手,现在我正在使用Laravel开发JWT。我正在使用tymon \ jwt-auth(具体来说是tymon/jwt-auth:dev-develop --prefer-source
)。我完成了一些教程,并能够生成JWT访问令牌。
这是我的登录代码:
public function login() {
$credentials = request(['email', 'password']);
if (!$token = auth('api')->attempt($credentials)) {
return response()->json(['error' => 'Unauthorized'], 401);
}
return response()->json([
'status' => 'success',
'message' => 'Login successful',
'data' => [
'access_token' => $token,
],
]);
}
我还需要获取刷新令牌以及访问令牌,并且找不到适合我的情况的代码。
我尝试在代码中添加以下行:
$refresh_token = JWTAuth::refresh($token);
但邮递员返回此错误:
文件中需要令牌 /var/www/brochill-api/vendor/tymon/jwt-auth/src/JWT.php,第331行
如果需要,我还可以提供我使用的其他配置摘要。请帮忙!
答案 0 :(得分:0)
让我们开始创建一条/refresh
路线:
Route::post('refresh', 'AuthController@refresh');
现在,在AuthController
中,
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
class AuthController extends Controller
{
/**
* Create a new AuthController instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth:api', ['except' => ['login']]);
}
/**
* Get a JWT via given credentials.
*
* @return \Illuminate\Http\JsonResponse
*/
public function login()
{
//
}
/**
* Get the authenticated User.
*
* @return \Illuminate\Http\JsonResponse
*/
public function me()
{
//
}
/**
* Log the user out (Invalidate the token).
*
* @return \Illuminate\Http\JsonResponse
*/
public function logout()
{
//
}
/**
* Refresh a token.
*
* @return \Illuminate\Http\JsonResponse
*/
public function refresh()
{
return $this->respondWithToken(auth()->refresh());
}
/**
* Get the token array structure.
*
* @param string $token
*
* @return \Illuminate\Http\JsonResponse
*/
protected function respondWithToken($token)
{
return response()->json([
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => auth()->factory()->getTTL() * 60
]);
}
}
refresh()
函数刷新访问令牌并使当前令牌无效。
有关这些的更多信息,您可以查看here上的tymon/jwt-auth
官方文档。