请问 Laravel Sanctum 获取 token 后如何使用 token 调用 user 接口获取当前用户的个人信息?

是不是类似这样 my-app.test/api/user?my-app-token=4...
教程我参考的是翻译:Laravel 教程:使用 Laravel Sanctum 作为 API 认证来构建 Vue.js 应...
前端用的是 vue-admin-template,已经获取到 token,但是获取 token 后如何利用 token 获取数据搞不懂,求高手解惑,谢谢。

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

你的教程 (翻译文章) 里不有么,使用 axios 设置了请求头 Authorization = Bearer $token

axios.defaults.headers.common.Authorization = `Bearer ${userData.token}`
4年前 评论
ztlcoder 4年前
laravel_denghy 4年前
firstsight (楼主) 4年前
讨论数量: 8

你的教程 (翻译文章) 里不有么,使用 axios 设置了请求头 Authorization = Bearer $token

axios.defaults.headers.common.Authorization = `Bearer ${userData.token}`
4年前 评论
ztlcoder 4年前
laravel_denghy 4年前
firstsight (楼主) 4年前

请问后台怎么从这个 token 获取登录信息。

4年前 评论

@xuncanzhe 看下 Sanctum 的源码你应该就能知道了

涉及到两个文件 PersonalAccessToken.phpSanctum.php

  1. PersonalAccessToken.php 中的 findToken 方法源码如下:

    public static function findToken($token)
    {
     if (strpos($token, '|') === false) {
         return static::where('token', hash('sha256', $token))->first();
     }
    
     [$id, $token] = explode('|', $token, 2);
    
     if ($instance = static::find($id)) {
         return hash_equals($instance->token, hash('sha256', $token)) ? $instance : null;
     }
    }

    通过 idpersonal_access_tokens 表中查找记录,并通过 sha256 算法比较传过来的 token 与表中存的 token 是否相等

  2. Sanctum.php 中的 actingAs 方法如下:

    public static function actingAs($user, $abilities = [], $guard = 'sanctum')
    {
     $token = Mockery::mock(self::personalAccessTokenModel())->shouldIgnoreMissing(false);
    
     if (in_array('*', $abilities)) {
         $token->shouldReceive('can')->withAnyArgs()->andReturn(true);
     } else {
         foreach ($abilities as $ability) {
             $token->shouldReceive('can')->with($ability)->andReturn(true);
         }
     }
    
     $user->withAccessToken($token);
    
     if (isset($user->wasRecentlyCreated) && $user->wasRecentlyCreated) {
         $user->wasRecentlyCreated = false;
     }
    
     app('auth')->guard($guard)->setUser($user);
    
     app('auth')->shouldUse($guard);
    
     return $user;
    }

先判断令牌持有者的能力,再返回用户信息。其中使用的 personalAccessTokenModel 方法在 Sanctum.php 中也能找到,其实就是使用了 Laravel\Sanctum\PersonalAccessToken

4年前 评论

有哪位大神知道为什么会去查 users 表的 api_token 这个字段吗

3年前 评论
$guard = Auth::guard('sanctum');
 $user = $guard->user();

$guard->check()

1年前 评论