我可以将 Laravel Sanctum 生成的 plainTextToken 存储到本地存储吗?

问题描述 投票:0回答:1

我一直在使用 React、Laravel、Laravel Sanctum 构建一个博客项目,它提供身份验证。

我了解到客户端(例如网络浏览器)必须请求 api/sanctum/csrf-cookie,因为我必须检索 csrf 令牌。接下来,通过使用适当的登录数据(电子邮件、密码)请求 api/login,我可以获得由 Laravel Sanctum 生成的 plainTextToken。

现在我发现当我想登录时如何使用 plainTextToken 。要将 Bearer Token 放入请求标头中,我需要将 plainTextToken 存储在某处。

我可以将 plainTextToken 存储在 LocalStorage 或 SessionStorage 中吗?

因为..我认为每当我访问需要身份验证的页面时,React Components应该维护并提供令牌数据。

我会附上已经写好的Laravel AuthController。

class AuthController extends Controller
{
    public function register(Request $request)
    {
        $val = $request->validate([
            'name' => 'required|string|max:255',
            "email" => "required|email|string|max:255|unique:users",
            "password" => "required|confirmed|string|min:12"
        ]);
        $user = User::create([
            "name" => $val['name'],
            'email' => $val['email'],
            'password' => Hash::make($val['password']),
        ]);
        return response()->json([
            'user' => $user
        ], 201);
    }

    public function login(Request $request)
    {
        if(!Auth::attempt($request->only('email', 'password'))) {
            return response()->json([
                'message' => "Invalid Login Details"
            ], 401);
        }
        $user = User::where('email', $request['email'])->firstOrFail();
        $token = $user->createToken("auth_token")->plainTextToken;
        return response()->json([
            'access_token' => $token,
            "token_type" => "Bearer",
        ]);
    }

    public function account(Request $request)
    {
        return $request->user();
    }

    public function logout(Request $request)
    {
        $request->user()->currentAccessToken()->delete();
        return response()->json([
            "msg" => "See You Later"
        ]);
    }

    public function delete(Request $request)
    {
        $request->user()->softDelete();
        return response()->json([
            "msg" => "You never register this email again"
        ]);
    }
}
php laravel token laravel-sanctum
1个回答
0
投票

使用 Laravel Sanctum,不需要通过会话或本地在服务器端存储“纯文本令牌”(因为它是 Sanctum STATELESS 授权的一部分)。您只需要在授权标头中发送“明文令牌”(来自客户端)作为承载令牌,然后在服务器端,Sanctum 执行授权操作(这对我来说现在很神秘)。

© www.soinside.com 2019 - 2024. All rights reserved.