2017-04-01 66 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;