oli*_*rbj 7 php laravel vue.js vuejs2
我目前正在尝试使用 Vue 和 Laravel 创建一个简单的 SPA。我已经掌握了工作的基础知识 - 用户可以注册和登录。
我只是不知道如何创建注销功能。
这是我目前拥有的:
AuthController.php:
public function logout()
{
$accessToken = auth()->user()->token();
$refreshToken = DB::table('oauth_refresh_tokens')
->where('access_token_id', $accessToken->id)
->update([
'revoked' => true
]);
$accessToken->revoke();
return response()->json(['status' => 200]);
}
Run Code Online (Sandbox Code Playgroud)
routes/api.php:
Route::middleware('auth:api')->group(function () {
Route::post('/logout', 'API\AuthController@logout');
Route::get('/get-user', 'API\AuthController@getUser');
});
Run Code Online (Sandbox Code Playgroud)
现在,这就是我试图做的:
Layout.vue:
methods: {
logout() {
axios.post('/api/logout').then(response => {
this.$router.push("/login")
}).catch(error => {
location.reload();
});
}
}
Run Code Online (Sandbox Code Playgroud)
其中调用我的注销功能Auth.js:
logout() {
localStorage.removeItem('token')
localStorage.removeItem('expiration')
}
Run Code Online (Sandbox Code Playgroud)
但是,当用户点击注销功能时,他们并没有立即注销(重定向到登录页面)——他们仍然可以浏览“仅限用户的页面”。
我必须在正确注销之前刷新页面。
任何人都可以帮助我吗?这甚至是“安全”注销功能的正确方法吗?
小智 5
这有点旧,但是,我刚刚开始使用 Laravel/Vue 并设法做到这一点非常简单。使用来自 Laravel 的集成身份验证,您可以像这样模拟从 app.blade.php 注销:
<b-dropdown-item href="#" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">Sign Out</b-dropdown-item> //that's instead of a regular <a> tag
<b-form id="logout-form" action="logout" method="POST" style="display: none;">
<input type="hidden" name="_token" :value="csrf">
</b-form>
Run Code Online (Sandbox Code Playgroud)
您需要让 csrf 令牌通过脚本中的数据传递,以便它像这样工作:
export default {
data() {
return {
csrf: document.querySelector('meta[name="csrf-token"]').getAttribute('content')
}
},
methods: {
submit : function(){
this.$refs.form.submit();
}
}
}
Run Code Online (Sandbox Code Playgroud)
以及在您的头脑中添加一个元 csrf(blade.php 文件),如下所示:
<meta name="csrf-token" content="{{ csrf_token()}}">
Run Code Online (Sandbox Code Playgroud)
我假设您将在导航栏 .vue 文件中使用注销
我自己从未使用过 Laravel,但您应该能够在客户端处理注销,而无需在后端执行任何操作。目前,您从本地存储中删除了身份验证令牌,因此用户将无法访问需要您登录才能获取的数据。
当您刷新页面时,您可能会调用您的getUser方法,这就是您仅在那时注销的原因 - 您将空令牌发送到后端服务器,它找不到与其关联的用户并返回一个空/默认来宾对象。剩下要做的就是删除函数中的令牌logout()或向端点发送请求后清除用户状态/get-user。
| 归档时间: |
|
| 查看次数: |
14182 次 |
| 最近记录: |