php - Laravel 5.4 - 注册后自动登录

标签 php laravel 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 in SessionGuard.php line 407: Argument 1 passed to Illuminate\Auth\SessionGuard::login() must be an instance of Illuminate\Contracts\Auth\Authenticatable, instance of App\User_entity given, called in /home/ali/www/brandmashhoor/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php on line 392 and defined

谁能告诉我什么是正确的问题。

最佳答案

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
{
    ....

关于php - Laravel 5.4 - 注册后自动登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42587367/

相关文章:

php - 如何用 PHP 重构这些 MySQL 查询?

php - 我应该使用什么正则表达式来查找不包含指定字符串的文件名?

php - 如何将 php 7.0 更新为 php 7.1+ ubuntu

php - 拉拉维尔 ORM : select distinct by DATE for each user

php - 从 URL(自己网站的)获取 HTML 内容

php - Laravel 使用软删除显示关系数据

php - 更改PHP上传文件的权限

php - 我如何在 Laravel Auth::attempt 中使用条件参数?

Javascript (Vue.js) 无法在移动设备和其他连接的设备上运行,但可以在运行本地主机的桌面上运行

javascript - 使用带有 ajax 和 jquery 的 js 模糊的 Laravel 电子邮件验证