Laravel 5.4 - Автоматический вход после регистрации

Я пытаюсь автоматически войти в систему после регистрации пользователя.

Мой способ регистрации пользователя:

public function register_user(Request $request)
{
    if (!$request->ajax()) return false;

    $form_rule = [
        'email'     => 'required|email|max:255|unique:tdshop_user_entity',
        'password'  => 'required|min:6',
    ];

    $validator  = Validator::make($request->all(), $form_rule);
    $status     = $validator->fails();

    $form_errors = [];
    foreach($form_rule as $field=>$rules){
        $form_errors[$field] = $validator->errors()->first($field);
    }

    if(!$validator->fails()){
        $user = User_entity::create([
            'email'     => $request['email'],
            'password'  => bcrypt($request['password']),
        ]);
        Auth::loginUsingId($user->user_id);
    }

    return json_encode([
        'status'    => ($status)? 'fail' : 'success',
        'result'    => json_encode($form_errors)
    ]);
}

Моя модель User_entity:

    namespace App;

    //use Illuminate\Database\Eloquent\Model;
    use Illuminate\Notifications\Notifiable;
    use Illuminate\Foundation\Auth\User as Authenticatable;
    use Zizaco\Entrust\Traits\EntrustUserTrait;
    use Eloquent;

    class User_entity extends Eloquent
    {
        use Notifiable;
        use EntrustUserTrait;

        protected $table    = 'tdshop_user_entity';
        protected $primaryKey = 'user_id';
        protected $fillable = ['email','password','status'];
        protected $hidden = ['password', 'remember_token'];

        public function Attribute_set()
        {
            return $this->hasOne('App\Attribute_set');   
        }

        public function Attribute_entity()
        {
            return $this->hasMany('App\Attribute_entity');
        } 

        public function User_address_entity()
        {
            return $this->hasMany('App\User_address_entity');
        } 
}

Регистрация пользователя прошла успешно и занесена в базу данных. Но для входа отображается следующая ошибка:

ErrorException в SessionGuard.php, строка 407: аргумент 1, переданный в Illuminate \ Auth \ SessionGuard :: login (), должен быть экземпляром Illuminate \ Contracts \ Auth \ Authenticatable, заданным экземпляром App \ User_entity, вызываемым в / home / ali / www /brandmashhoor/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php в строке 392 и определен

Кто-нибудь может сказать мне, в чем проблема.


person Ali Hesari    schedule 03.03.2017    source источник
comment
Если пользователь сохраняется в базе данных, то актуальная проблема заключается в методе входа в систему, а не в методе регистрации.   -  person slapbot    schedule 03.03.2017
comment
Включите вы User_entity модель.   -  person Samsquanch    schedule 03.03.2017
comment
@Samsquanch добавил.   -  person Ali Hesari    schedule 03.03.2017


Ответы (2)


Вы User_entity должны продлить Illuminate\Foundation\Auth\User, чтобы логин работал. В модели по умолчанию User это псевдоним Authenticatable.

В настоящее время вы расширяете Eloquent, но Authenticatable расширяет Illuminate\Database\Eloquent\Model, который позаботится об этом за вас.

Попробуйте это в своей User_entity модели:

use Illuminate\Foundation\Auth\User as Authenticatable;

class User_entity extends Authenticatable
{
    ....
person Samsquanch    schedule 03.03.2017
comment
Благодарить. Ваше решение устранит проблему. - person Ali Hesari; 03.03.2017

В RegisterController вы можете использовать следующий код для входа в систему после регистрации.

use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Response;



if ($validator->passes()) {
// Store your user in database
event(new Registered($user = $this->create($request->all())));           
return response(['success' => true,'redirect' => 'dashboard'],    Response::HTTP_OK);
}

вместо возврата ответа (['success' => true]);

используйте ниже.

Auth::login($user);
return response(['success' => true,'redirect' => 'dashboard'],     Response::HTTP_OK);
person user2068161    schedule 16.01.2020