【问题标题】:Laravel Sanctum tokenCan method on User model returns false despite correct ability尽管能力正确,用户模型上的 Laravel Sanctum tokenCan 方法仍返回 false
【发布时间】:2022-08-05 17:21:34
【问题描述】:

我在我的 Laravel 8 项目中使用 Laravel Sanctum,我正在构建一个控制器,它允许其他 Laravel 项目验证和检查令牌的能力,为此我正在使用 @987654321 查找令牌@ 方法,获取 tokenable_id(这是用户 id),然后根据 User 模型查找此用户。

然后我将其存储在一个变量中并使用tokenCan 检查能力,但尽管我的令牌具有正确的能力,但它总是返回 false,我从这个方法中遗漏了什么?

<?php

namespace App\\Http\\Controllers;

use Illuminate\\Http\\Request;
use Illuminate\\Support\\Facades\\Validator;
use Laravel\\Sanctum\\PersonalAccessToken;
use App\\Models\\User;

class HubController extends Controller
{
    /**
     * Instantiate a new AccountController instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware(\'throttle:30,1\');
    }

    /**
     * Handle the incoming request.
     *
     * @param  \\Illuminate\\Http\\Request  $request
     * @return \\Illuminate\\Http\\Response
     */
    public function __invoke(Request $request)
    {
        $validator = Validator::make($request->all(), [
            \'token\' => \'required|string\',
            \'ability\' => \'required|string\'
        ]);

        if ($validator->fails()) {
            return response()->json([
                \'message\' => \"It looks like you\'ve missed something.\",
                \'errors\' => $validator->messages()
            ], 400);
        }

        $token = PersonalAccessToken::findToken($request->input(\'token\'));

        if (!$token) {
            return response()->json([
                \'message\' => \"Token not found or is invalid\"
            ], 404);
        }

        $user = User::find($token->tokenable_id);

        if (!$user) {
            return response()->json([
                \'message\' => \"User not found or is invalid\"
            ], 404);
        }

        // $user->tokenCan(\'reports:view\') always returning false
        return response()->json([
            \'token\' => $user->tokenCan(\'reports:view\'),
            \'message\' => \"You don\'t have the correct permissions to perform this action.\"
        ], 401);

        return response()->json([
            \'user\' => $user
        ], 200);
    }
}
  • 请将令牌创建代码添加到问题中以更好地调试问题。

标签: php laravel laravel-sanctum


【解决方案1】:

您可以通过$request-&gt;user() 获得 $user。 或使用$request-&gt;user()-&gt;tokenCan('reports:view')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 2018-12-28
    • 1970-01-01
    相关资源
    最近更新 更多