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->tokens()->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 令牌