Laravel 5.6 方法 Illuminate\Database\Query\Builder::createToken 不存在
Laravel 5.6 Method Illuminate\Database\Query\Builder::createToken does not exist
我正在尝试使用 Passport 创建 API 身份验证,但是当使用 createToken() 注册用户时,我似乎无法创建令牌。
我已经检查过我已经包含了 HasApiTokens,但仍然出现同样的错误。
错误
Method Illuminate\Database\Query\Builder::createToken does not exist
App\User
namespace App;
use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
SignupController
**public function userLogin(Request $request)
{
$email = $request->email;
$password = $request->password;
$user = User::where('email' , $email)->where( 'password' , $password);
if($user)
{
$token = $user->createToken('MyApp')->accessToken;
$arr = array('token' => $token, 'status' => 'isTrue', 'userId' => $data[0]->id);
//return response()->json($arr , 200);
}**
}
您需要获取用户。目前 $user 是 QueryBuilder,不是用户对象。
User::where('email', $email)->where('password', $password)->first();
您需要添加get()
或first()
或'firstOrFail()'等方法来获取数据库结果。所有 where
链只是 return QueryBuilder
的对象。第二件事是你不会将密码保存为纯文本(如果你正在保存那么请在保存之前更改它并对其进行哈希处理)。对于您的情况,它将变为:
$user = User::where('email' , $email)->where( 'password' , $password)->first();
哈希密码场景:
$user = User::where('email' , $email)->first();
if(Hash::check(optional($user)->password, $request->password)) {
// your code here
}
您需要添加
use Laravel\Passport\HasApiTokens;
class User extends Authenticatable {
use HasApiTokens,
Notifiable;
用户模型的特征。
我正在尝试使用 Passport 创建 API 身份验证,但是当使用 createToken() 注册用户时,我似乎无法创建令牌。
我已经检查过我已经包含了 HasApiTokens,但仍然出现同样的错误。
错误
Method Illuminate\Database\Query\Builder::createToken does not exist
App\User
namespace App;
use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
SignupController
**public function userLogin(Request $request)
{
$email = $request->email;
$password = $request->password;
$user = User::where('email' , $email)->where( 'password' , $password);
if($user)
{
$token = $user->createToken('MyApp')->accessToken;
$arr = array('token' => $token, 'status' => 'isTrue', 'userId' => $data[0]->id);
//return response()->json($arr , 200);
}**
}
您需要获取用户。目前 $user 是 QueryBuilder,不是用户对象。
User::where('email', $email)->where('password', $password)->first();
您需要添加get()
或first()
或'firstOrFail()'等方法来获取数据库结果。所有 where
链只是 return QueryBuilder
的对象。第二件事是你不会将密码保存为纯文本(如果你正在保存那么请在保存之前更改它并对其进行哈希处理)。对于您的情况,它将变为:
$user = User::where('email' , $email)->where( 'password' , $password)->first();
哈希密码场景:
$user = User::where('email' , $email)->first();
if(Hash::check(optional($user)->password, $request->password)) {
// your code here
}
您需要添加
use Laravel\Passport\HasApiTokens;
class User extends Authenticatable {
use HasApiTokens,
Notifiable;
用户模型的特征。