Авторизация После успешной регистрации в laravel 6 появляется ошибка - PullRequest
0 голосов
/ 23 февраля 2020

При попытке автоматического входа появляется ошибка. После успешной регистрации в laravel 6 появляется следующая ошибка.

Аргумент 1 передан в Illuminate \ Auth \ SessionGuard :: login () must реализовать интерфейс Illuminate \ Contracts \ Auth \ Authenticatable, задано значение NULL, вызывается в

Мой Registercontroller -

class RegisterController extends Controller
{

use RegistersUsers;

protected $redirectTo = RouteServiceProvider::HOME;

public function __construct()
{
     $this->middleware('guest');
   // $this->middleware(['auth','verified']);
}

protected function validator(array $data)
{
    return Validator::make($data, [
     'name' => ['required', 'min:3'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => ['required', 'string', 'min:8', 'confirmed'],
    ]);
}
protected function create(array $data)
{

    $username = slugify($data['name'])."-".mt_rand(10000, 99999);
    $user =  User::create([
        'name' => $data['name'],
        'username' => $username,
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
        'email_token' => base64_encode($data['email']),

    ]);

    Auth::loginUsingId($user->id);

}

}

Модель пользователя

<?php

namespace App;

 use Illuminate\Contracts\Auth\MustVerifyEmail;
 use Illuminate\Foundation\Auth\User as Authenticatable;
 use Illuminate\Notifications\Notifiable;
 use App\Jobs\SendEmailJob;

class User extends Authenticatable implements MustVerifyEmail
{
use Notifiable;

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [


   'email','name','password','username','picture',
   'ip_address','email_verified_at','email_token','verified'
];




/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token',
];

/**
 * The attributes that should be cast to native types.
 *
 * @var array
 */
protected $casts = [
    'email_verified_at' => 'datetime',
];


function socialProviders(){

    return $this->hasMany(socialProvider::class);
}


  // This is the code define in the sendEmailVerificationNotification
  public function sendEmailVerificationNotification()
   {
     SendEmailJob::dispatch($this);
   }
 }

1 Ответ

1 голос
/ 23 февраля 2020

Вы перезаписали регистрационные логи c, но проигнорировали тот факт, что метод create должен возвращать экземпляр App\User - или хотя бы класс, который реализует Authenticatable.

* 1005. * Взгляните на оригинальную логику c; вы увидите, что докблок показывает, что возвращается экземпляр App\User и что исходная реализация возвращает результат вызова User::create().

Чтобы ваш пользовательский метод работал, обновите его следующим образом:

protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'username' => slugify($data['name'])."-".mt_rand(10000, 99999);,
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
        'email_token' => base64_encode($data['email']),

    ]);
}

Laravel позаботится о том, чтобы зарегистрировать пользователя в по умолчанию в любом случае.

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