Laravel 5.6方法\Database\Query\Builder::createToken不存在
我正在尝试使用Passport创建API身份验证,但在使用createToken()注册用户时,我似乎无法创建令牌 我已经检查了是否包含HasApiTokens,但仍然给出了相同的错误 错误 方法\Database\Query\Builder::createToken不存在 App\UserLaravel 5.6方法\Database\Query\Builder::createToken不存在,laravel,laravel-5,Laravel,Laravel 5,我正在尝试使用Passport创建API身份验证,但在使用createToken()注册用户时,我似乎无法创建令牌 我已经检查了是否包含HasApiTokens,但仍然给出了相同的错误 错误 方法\Database\Query\Builder::createToken不存在 App\User namespace App; use Laravel\Passport\HasApiTokens; use Illuminate\Notifications\Notifiable; use Illumin
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',
];
}
**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);
}**
}
注册控制器
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',
];
}
**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对象
User::where('email',$email)->where('password',$password)->first()代码>您需要获取用户。当前$user是QueryBuilder,而不是user对象
User::where('email',$email)->where('password',$password)->first()
您需要添加诸如get()
或first()
或'firstOrFail()'之类的方法来获取数据库结果。所有where
链只返回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
}
您需要添加诸如get()
或first()
或'firstOrFail()'之类的方法来获取数据库结果。所有where
链只返回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;
特性添加到您的用户模型。您需要添加
use Laravel\Passport\HasApiTokens;
class User extends Authenticatable {
use HasApiTokens,
Notifiable;
您的用户模型的特点。谢谢您的帮助!还有一件事,似乎我无法用该语句检查db中的散列密码,除非我使用散列密码,否则我如何在该语句中执行Hash::check()?删除第二个where,因此您的查询看起来像是User::where('email',$email)->first()
,然后将您的条件重构为类似以下内容的if($user&&Hash::check($password,$user->password))
。谢谢您的帮助!还有一件事,似乎我无法用该语句检查db中的散列密码,除非我使用散列密码,否则我如何在该语句中执行Hash::check()?删除第二个where,因此您的查询看起来像是User::where('email',$email)->first()
,然后将您的条件重构为类似以下内容的if($user&&Hash::check($password,$user->password))
。