Laravel 5.6 Метод Illuminate \ Database \ Query \ Builder :: createToken не существует - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь создать аутентификацию API с помощью Passport, но не могу создать токен, когда пользователь регистрируется с помощью createToken ().

Я уже проверил, я включил HasApiTokens, но все равно выдает ту же ошибку.

ERROR

Метод Illuminate \ Database \ Query \ Builder :: createToken не существует

App \ Пользователь

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

Ответы [ 3 ]

0 голосов
/ 06 мая 2018

Вам нужно добавить методы, такие как 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
}
0 голосов
/ 17 июля 2018

Вам необходимо добавить

use Laravel\Passport\HasApiTokens;

class User extends Authenticatable {

use HasApiTokens,
    Notifiable;

черта вашей модели пользователя.

0 голосов
/ 06 мая 2018

Вам нужно получить пользователя. В настоящее время $ user - это QueryBuilder, а не объект пользователя.

User::where('email', $email)->where('password', $password)->first();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...