gpt4 book ai didi

javascript - Nuxt.js + Auth(jwt 刷新 token )

转载 作者:行者123 更新时间:2023-12-04 14:39:41 25 4
gpt4 key购买 nike

我在我的 Vue/Nuxt 项目中使用了 Auth 库。 JWT 身份验证对我来说很好用,但 refresh token 有问题.
首先,refreshToken cookie 始终设置为 null:
enter image description here
其次,当我调用 this.$auth.refreshTokens() 时出现错误:

this.$auth.refreshTokens is not a function


我已经尝试了很长时间来解决这个问题,但我终于放弃了:(
你可以看到我的 server sideclient side我的 GitHub 上的代码。
对于短猫,下面是 nuxt.config.js 文件的片段:
   auth: {
strategies: {
local: {
scheme: 'refresh',
token: {
property: 'token',
maxAge: 30,
// type: 'Bearer'
},
refreshToken: {
property: 'refreshToken',
data: 'refreshToken',
maxAge: 60
},
user: {},
endpoints: {
login: { url: 'users/login', method: 'post' },
refresh: { url: 'users/refreshToken', method: 'post' },
user: { url: 'users/me', method: 'get', propertyName: '' },
logout: false
},
// autoLogout: false
}
}
},
我已经检查了客户端配置文件和服务器中的所有名称是否都符合。
预先感谢您的帮助,对于我的英语错误,我深表歉意,我已经尽力了...

最佳答案

我想我做到了,让我与你分享我所做的
我写了一个名为 auth 这个插件的插件基本上如下

  • 检查是否存储了 token
  • 然后通过请求获取用户数据来检查存储的 token 是否已过期
  • 如果请求失败,我们向 /refresh 发出请求端点刷新请求 header 中的当前 token ,然后在响应中将其发回
  • 我们将这个新 token 存储在客户端
  • 如果refresh请求也失败了,我们清除了 auth 对象

  • 这是插件代码
    const strategy = 'local'
    const FALLBACK_INTERVAL = 900 * 1000 * 0.75

    async function refreshTokenF($auth, $axios, refreshToken) {
    try {
    const response = await $axios.post('/refresh')
    let token = 'Bearer ' + response.data.token
    console.log(refreshToken);
    console.log(token);
    $auth.setToken(strategy, token)
    $axios.setToken(token)
    return decodeToken.call(this, token).exp
    } catch (error) {
    $auth.logout()
    throw new Error('Error while refreshing token')
    }
    }

    export default async function ({app}) {

    const {$axios, $auth} = app

    let token = $auth.getToken(strategy)
    let refreshInterval = FALLBACK_INTERVAL
    if (token) {
    $axios.get('/me').then((resp) => {
    $auth.setUser(resp.data.data)
    }).catch(async () => {
    try {
    await refreshTokenF($auth,$axios,token);
    } catch (e) {
    $auth.logOut();
    }
    })
    }

    setInterval(async function () {
    token = $auth.getToken(strategy)
    await refreshTokenF($auth, $axios, token)
    }, refreshInterval)

    }

    还可以查看我的 Controller 以刷新 token
    <?php


    namespace App\Http\Controllers\Api\Auth;


    use App\Http\Controllers\Controller;
    use Illuminate\Http\Request;
    use Mpdf\Tag\THead;
    use Tymon\JWTAuth\JWTAuth;

    class RefreshController extends Controller
    {

    protected $auth;
    /**
    * Create a new controller instance.
    *
    * @return void
    */
    public function __construct(JWTAuth $auth)
    {
    $this->auth = $auth;
    }

    public function refresh(Request $request)
    {
    $this->auth->setRequest($request);
    $arr = $this->auth->getToken();
    $arr = $this->auth->refresh();
    $this->auth->setToken($arr);
    return response()->json([
    'success' => true,
    'data' => $request->user(),
    'token' => $arr
    ], 200); }

    }
    祝你今天过得愉快

    关于javascript - Nuxt.js + Auth(jwt 刷新 token ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63436923/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com