2017-04-01 52 views
0

嗨我创建用户时遇到了问题。我得到这个错误: SessionGuard.php中的FatalThrowableError第407行:类型错误:传递给Illuminate \ Auth \ SessionGuard :: login()的参数1必须实现接口Illuminate \ Contracts \ Auth \ Authenticatable,null给出,在/ home中调用/mariusz/Pulpit/www/szpital/vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php线路35Laravel 5.4创建用户时出错

用户是无论如何创建的,但这个错误是如此是烦人,我不知道如何解决它。 我使用laravel认证和我小编辑寄存器控制器因为我需要为用户添加角色,现在我的控制器看起来像那样。

<?php 
 

 
namespace App\Http\Controllers\Auth; 
 

 
use App\User; 
 
use App\Role; 
 
use App\Http\Controllers\Controller; 
 
use Illuminate\Support\Facades\Validator; 
 
use Illuminate\Foundation\Auth\RegistersUsers; 
 
use Illuminate\Support\Facades\Auth; 
 

 
class RegisterController extends Controller 
 
{ 
 
    /* 
 
    |-------------------------------------------------------------------------- 
 
    | Register Controller 
 
    |-------------------------------------------------------------------------- 
 
    | 
 
    | This controller handles the registration of new users as well as their 
 
    | validation and creation. By default this controller uses a trait to 
 
    | provide this functionality without requiring any additional code. 
 
    | 
 
    */ 
 

 
    use RegistersUsers; 
 

 
    /** 
 
    * Where to redirect users after registration. 
 
    * 
 
    * @var string 
 
    */ 
 
    protected $redirectTo = '/home'; 
 

 
    /** 
 
    * Create a new controller instance. 
 
    * 
 
    * @return void 
 
    */ 
 
    public function __construct() 
 
    { 
 
     $this->middleware('guest'); 
 
    } 
 

 
    /** 
 
    * Get a validator for an incoming registration request. 
 
    * 
 
    * @param array $data 
 
    * @return \Illuminate\Contracts\Validation\Validator 
 
    */ 
 
    protected function validator(array $data) 
 
    { 
 
     return Validator::make($data, [ 
 
      'name' => 'required|max:255', 
 
      'lastname' => 'required|max:255', 
 
      'phonenumber' => 'required|max:255', 
 
      'email' => 'required|email|max:255|unique:users', 
 
      'password' => 'required|min:6|confirmed', 
 
     ]); 
 
    } 
 

 

 
    /** 
 
    * Create a new user instance after a valid registration. 
 
    * 
 
    * @param array $data 
 
    * 
 
    */ 
 

 
    public function create(array $data) 
 
    { 
 
     $user = new User(); 
 
     $user->name = $data['name']; 
 
     $user->lastname = $data['lastname']; 
 
     $user->phonenumber = $data['phonenumber']; 
 
     $user->email = $data['email']; 
 
     $user->password = bcrypt($data['password']); 
 
     $user->save(); 
 
     $user->roles()->attach(Role::where('name', 'User')->first()); 
 
     Auth::login($user); 
 
     
 
     
 
    } 
 
}
我不知道mybe我不应该对其进行编辑。我想解释当我得到这个错误: 1.我去页创建acc。 2.我写的名字等 3.当我点击创建我有错误 4.接下来,当我刷新页面用户创建时,登录并重定向到主页。

回答

1

在注册后,您不需要在Laravel 5.4中添加行Auth::login($user);以进行自动登录。替换:

public function create(array $data) 
{ 
     $user = new User(); 
     $user->name = $data['name']; 
     $user->lastname = $data['lastname']; 
     $user->phonenumber = $data['phonenumber']; 
     $user->email = $data['email']; 
     $user->password = bcrypt($data['password']); 
     $user->save(); 
     $user->roles()->attach(Role::where('name', 'User')->first()); 
     Auth::login($user); 
} 

有:

public function create(array $data) 
{ 
     $user = new User(); 
     $user->name = $data['name']; 
     $user->lastname = $data['lastname']; 
     $user->phonenumber = $data['phonenumber']; 
     $user->email = $data['email']; 
     $user->password = bcrypt($data['password']); 
     $user->save(); 
     $user->roles()->attach(Role::where('name', 'User')->first()); 

     return $user; 
} 

如果您Laravel框架,并权威性控制器代码进行上最新的RegisterUsers特质应该解决它。这也应该解决你遇到的问题。

+0

你们THX其工作,P – Mariusz

1

当用户使用::创建

return User::create([ 
     'name' => $data['name'], 
     'username' => $data['username'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
    ]); 

对于默认返回$用户

解决,结束返回$用户结束

$user = new User([ 
     'name' => $data['name'], 
     'username' => $data['username'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
    ]); 
    $user->save(); 

    return $user;