首先,让我承认我是API新手,现在我正在和Laravel一起研究JWT。我使用的是tymon\jwt auth(tymon/jwt auth:dev-develope——希望源代码更具体)。我阅读了一些教程,并能够生成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);
但邮递员返回时出现以下错误:
第331行的文件/var/www/brockhill api/vendor/tymon/jwt auth/src/jwt.php中需要一个令牌
如果需要,我还可以提供我使用的其他配置片段。请帮帮忙!
让我们从创建/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()
函数刷新访问令牌并使当前令牌无效。
有关这些的更多信息,您可以查看tymon/jwt auth
的官方文档,可以在这里找到。
问题内容: 我们的React Native Redux应用程序使用JWT令牌进行身份验证。有许多操作需要此类令牌,并且例如在应用加载时会同时分派许多令牌。 例如 双方并要求JWT。我们将令牌保存在和中。我的问题是如何处理令牌到期。 最初,我将使用中间件来处理令牌到期 } 我遇到的问题是,对于令牌和操作,都会刷新令牌,因为在分发令牌和令牌时,令牌将过期。理想情况下,我想“暂停”需要身份验证的操作
我遇到的问题是,和操作都将刷新令牌,因为在分派时,令牌将过期。理想情况下,我希望“暂停”需要身份验证的操作,直到令牌刷新。有没有一种方法可以用中间件做到这一点?
我正在构建一个移动应用程序,并且正在使用JWT进行身份验证。 最好的方法似乎是将JWT访问令牌与刷新令牌配对,这样我就可以根据需要频繁地使访问令牌过期。 刷新令牌是什么样子的?是随机字符串吗?那串加密了吗?是另一个JWT吗? 刷新令牌将存储在用户模型的数据库中以便访问,对吗?在这种情况下似乎应该加密 在用户登录后,我是否会将刷新令牌发送回,然后让客户端访问单独的路由来检索访问令牌?
当用户发送他的用户名/密码时,服务会发送回JWT,该JWT存储在客户端的localStorage中。这个很管用。但是,我想使用刷新令牌继续向客户端发出新的JWT,使用户在使用该应用程序时保持登录状态。这些刷新令牌应该发在哪里?是否应在用户发送其用户名/密码时发出?如果是这样,那么在tymon/jwt-auth库中似乎没有一种方法可以将刷新令牌发送到客户机。请帮帮我,我很难想清楚这是怎么工作的。
我使用jwt为用户在我的应用程序上执行操作提供授权。它工作得很好,因为我不必访问数据库来查看用户是否有效。我在jwt中遇到的问题是,当令牌过期时,用户必须再次登录。在网上阅读我一直在阅读刷新令牌可以用来解决这个问题,但没有白痴证明解释它如何工作。它们是如何工作的?需要数据库访问吗?
我正在使用Tymon提供的包来处理从我的laravel后端到spa前端的Auth,我正在创建AuthController,这几乎是我从文档中获取的,只是稍微调整一下它以满足我的需要。从登录到注销以及令牌过期,一切正常。 问题是,我确实看到该控制器上有一个令牌刷新功能,如果我的猜测是正确的,那就是刷新客户端已经拥有的当前令牌。但是怎么做呢?如何处理前端上的刷新令牌?因为它是相当烦人的,每60分钟(默