Laravel Sanctum 令牌()未定义

Posted

技术标签:

【中文标题】Laravel Sanctum 令牌()未定义【英文标题】:Laravel Sanctum tokens() undefined 【发布时间】:2021-07-02 20:44:55 【问题描述】:

我是 laravel 的新手,正在尝试使用 sanctum 构建一个用于登录的 api。

我遵循了文档和一些教程,但我遇到了一个错误,即即使使用 HasApiToken,我的用户类也无法访问令牌函数。

这是我的用户模型:

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable

    use HasApiTokens, HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name',
        'email',
        'password',
        'alt_id',
        'country_id',
        'birth'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'type',
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    public function country()
    
        return $this->hasOne(Country::class);
    


[这是错误信息][1] [1]:https://i.stack.imgur.com/QzGK9.png

我也已经检查了 config/auth.php 中的路由,它是 App\Models\User::class

【问题讨论】:

这只是 Intelephense 消息。如果您访问该网站,该代码是否有效?还是有错误信息? 我...没有尝试运行它,我认为它不会让我运行,只是运行它并且确实有效。不知道如何删除错误的错误警报,但如果它有效,那并不重要。 如果您没有正确或过时的插件,有时会发生这种情况。 Intelephense 大部分是正确的,但你不应该盲目依赖它:) 【参考方案1】:

我通过将$user-&gt;tokens()-&gt;delete(); 添加到我的 AuthController@logout 中解决了这个问题,

 <?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;

class AuthController extends Controller

  public function logout(User $user)

          $user->tokens()->delete();

          return [
              'message' => 'Logged out'
          ];
      
 

而用户模型看起来像这样。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable

    use HasApiTokens, HasFactory, Notifiable;

    protected $fillable = [
        //some code
    ];
    protected $hidden = [
        //some code
    ];
    protected $casts = [
        //some code
    ];

【讨论】:

请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。 接受您的评论并将我的回答编辑为更易读的格式。谢谢你的建议 太棒了。享受 ***! :-)

以上是关于Laravel Sanctum 令牌()未定义的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CSRF 令牌测试 Laravel / Sanctum 端点

api 端点未在 Sanctum 上进行 CSRF 令牌验证 - CSRF 令牌不匹配

为啥我的 CSRF 令牌与 Laravel 和 Sanctum 不匹配?

用于非 SPA 的 Laravel Sanctum API 令牌

Laravel Sanctum auth:sanctum 路由允许在没有承载令牌的情况下访问

Laravel 7 Vue 2 Sanctum 登录错误 419; CSRF 令牌不匹配