当前位置: 首页 > 知识库问答 >
问题:

用户认证 - Laravel中的Sanctum和Vue之间是怎么通过TOKEN来产生会话的?

干旺
2025-03-25

环境是PHP8.2.9+Laravel10

我这边打算用Laravel10+Vue3前后端隔离,通过Json互通数据。

Laravel10的话我用sanctum来判断用户是否登录,但是我不了解这个API验证是一个怎么样的一个过程,用户登录了生成一个TOKEN,这个token保存在哪里?后续的要获取相关信息的话,怎么通过token来判断是否登录呢????

整个流程我都不太明白,有哪位大哥可以解释解释吗?

我这边已经弄好sanctum插件了,也生成好相关的表了,就是不太懂整个流程是怎么样的?

共有2个答案

闽康安
2025-03-25

默认情况下, Token 需要通过 Request Header,进行传递,根据不同的请求包自行传就好了。

Authorization: Bearer <TOKEN>

这个 Token 是有状态的,在 personal_access_tokens 表中存放,也提供的有相关的 API 来管理 Token。

对于需要用户登录后可见的接口或页面,使用 auth:sanctum 中间件进行保护就好了,或者把 sanctum 设置为默认的 guard。

大致流程官网的 文档 上已经提到了的。

用户名、密码通过验证后,生成 Token 返回给前端,然后前端保存这个 Token,后续请求再带上就好了。

董高朗
2025-03-25

Sanctum API Token 认证流程详解(Laravel+Vue 前后端分离场景):

  1. Token生成阶段

    // 登录控制器
    public function login(Request $request)
    {
     $credentials = $request->validate([
         'email' => 'required|email',
         'password' => 'required'
     ]);
    
     if (!Auth::attempt($credentials)) {
         return response()->json(['message' => 'Invalid credentials'], 401);
     }
    
     // 生成API Token(返回普通token)
     $token = $request->user()->createToken('vue3-token')->plainTextToken;
     
     return response()->json([
         'token' => $token,
         'user' => Auth::user()
     ]);
    }
  2. Token存储位置:personal_access_tokens 表(sanctum生成)
  3. 前端存储:Vue收到token后应存储在localStoragesessionStorage
  4. 请求携带Token

    // Vue3请求示例(axios)
    axios.get('/api/user', {
     headers: {
         Authorization: `Bearer ${localStorage.getItem('token')}`
     }
    })
  5. Laravel验证流程

    // 路由保护(routes/api.php)
    Route::middleware('auth:sanctum')->group(function () {
     Route::get('/user', function (Request $request) {
         return $request->user();
     });
    });
  6. 验证过程:

    1. Sanctum中间件检查Authorization头
    2. 解析Bearer Token
    3. 验证token有效性(是否存在于personal_access_tokens表)
    4. 关联用户模型
    5. 通过$request->user()获取认证用户
  7. 关键配置项

    SESSION_DRIVER=cookie
    SANCTUM_STATEFUL_DOMAINS=your-frontend-domain.com
  8. 注销处理

    // 注销控制器
    public function logout(Request $request)
    {
     $request->user()->currentAccessToken()->delete();
     return response()->json(['message' => 'Logged out']);
    }

补充说明:

  • 跨域配置需正确设置(config/cors.php)
  • 生产环境建议使用HTTPS
  • Token有效期默认永久,可通过中间件自定义过期策略
  • 前端应实现token自动续期/刷新逻辑
  • 敏感接口建议配合CSRF保护(当使用浏览器cookie时)
 类似资料:
  • 我已经开始了一个现有的Laravel 5.2项目的工作。我需要为应用程序的前端构建一些基本的应用程序接口请求来与数据库交谈。这些路由需要由用户的会话进行身份验证。 我已经尝试使用auth:api驱动程序设置中间件,并且在/config/auth。php将api['driver']设置为'session'。但是,我一直将302重定向到登录页面,即使用户已通过所有权限和角色的身份验证。 有人能推荐一些

  • 本文向大家介绍python 产生token及token验证的方法,包括了python 产生token及token验证的方法的使用技巧和注意事项,需要的朋友参考一下 1、前言 最近在做微信公众号开发在进行网页授权时,微信需要用户自己在授权url中带上一个类似token的state的参数,以防止跨站攻击。 在经过再三思考之后,自己试着实现一个产生token和验证token的方案。接下就把code贴出来

  • 问题内容: 我想向同一队列发送一批20k JMS消息。我使用10个线程将任务拆分,因此每个线程将处理2k条消息。我不需要交易。 我想知道是否建议建立一个连接,一个会话和10个生产者? 如果所有线程共享一个生产者,该怎么办?我的消息会损坏还是会同步发送(不会提高性能)? 如果我总是连接到同一队列,那么决定是创建新连接还是会话的一般指导方针是什么? 谢谢你,很抱歉一次问了很多。 问题答案: 如果某些消

  • 简介 {tip} 想要快点开始? 只需在新的 Laravel 应用上运行 php artisan make:auth 和 php artisan migrate 命令。然后可以用浏览器访问 http://your-app.dev/register 或者你在程序中定义的其它 URL 。这两个命令就可以构建好整个认证系统。 Laravel 中实现用户认证非常简单。实际上,几乎所有东西都已经为你配置好了

  • 本文向大家介绍UIWebView和JavaScript之间是怎么交互的?相关面试题,主要包含被问及UIWebView和JavaScript之间是怎么交互的?时的应答技巧和注意事项,需要的朋友参考一下 UlWebView是i〇S SDK中渲染网面的控件,在显示网页的时候,我们可以hack网页 然后显示想显示的内容。其中就要用至JavaScript的知识,而UlWebView与javascript交互

  • 本文向大家介绍通过修改Laravel Auth使用salt和password进行认证用户详解,包括了通过修改Laravel Auth使用salt和password进行认证用户详解的使用技巧和注意事项,需要的朋友参考一下 前言 本文主要给大家介绍了通过修改Laravel Auth用salt和password进行认证用户的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: Lar

  • 本文向大家介绍Django JWT Token RestfulAPI用户认证详解,包括了Django JWT Token RestfulAPI用户认证详解的使用技巧和注意事项,需要的朋友参考一下 一般情况下我们Django默认的用户系统是满足不了我们的需求的,那么我们会对他做一定的扩展 创建用户项目 添加项目apps settings.py 编写model 扩展User model 编写seria