【发布时间】: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