Laravel 5.4 - 注册后自动登录
Laravel 5.4 - Auto login after registration
我正在尝试在用户注册后自动登录。
我的用户注册方式:
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
{
....
在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);
}
而不是
return 响应(['success' => 真]);
在下面使用。
Auth::login($user);
return response(['success' => true,'redirect' => 'dashboard'], Response::HTTP_OK);
我正在尝试在用户注册后自动登录。
我的用户注册方式:
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
{
....
在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);
}
而不是 return 响应(['success' => 真]);
在下面使用。
Auth::login($user);
return response(['success' => true,'redirect' => 'dashboard'], Response::HTTP_OK);