Laravel Sanctum返回:在null上调用成员函数createToken()

omvjsjqw  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(208)

我从这里开始跟踪密室文件。我按照描述做了所有的事情,但仍然不起作用。我在生成新令牌时遇到错误“Call to a member function createToken()on null”。

use Illuminate\Http\Request;

Route::post('/tokens/create', function (Request $request) {
    $token = $request->user()->createToken($request->token_name);
 
    return ['token' => $token->plainTextToken];
});

下面是我在github https://github.com/farukhaleem/sanctum上的代码
我尝试使用文档中描述的sanctum。我正在获取用于生成令牌的createToken()方法,但我无法在$request->user()中获取任何内容。我在vscode中使用thunder客户端来获取结果。http://127.0.0.1:8000/api/tokens/create是端点,方法类型是POST。FORM数据具有值为“data”的token_name

x4shl7ld

x4shl7ld1#

文档假设您有一个经过身份验证的用户,而您没有。这就是为什么$request->user()为空。
因此,为了生成令牌,您可以使用以下命令

Route::post('/tokens/create', function (Request $request) {

    $user = User::find("some user id");
    $token = $user->createToken($request->token_name);
 
    return ['token' => $token->plainTextToken];
});

由于您正在学习,如果您将路由转换为带有表单的登录,用户可以在其中输入他们的电子邮件和密码,以便提交您生成令牌,则会更有意义。

Route::post('/login', function (Request $request) {

    # do any validations here

    $user = User::where('email', $request->email)->first();
    $token = $user->createToken("The user agent here");
 
    return ['token' => $token->plainTextToken];
});

另外请注意,在createToken上,如果传递用户代理会更好。这样您就知道使用该特定令牌的应用程序。

相关问题