Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 5.6方法\Database\Query\Builder::createToken不存在_Laravel_Laravel 5 - Fatal编程技术网

Laravel 5.6方法\Database\Query\Builder::createToken不存在

Laravel 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

我正在尝试使用Passport创建API身份验证,但在使用createToken()注册用户时,我似乎无法创建令牌

我已经检查了是否包含HasApiTokens,但仍然给出了相同的错误

错误

方法\Database\Query\Builder::createToken不存在

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',
    ];
}
**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))