2017-03-27 138 views
1

不工作在RegisterController我寫認證在laravel 5.4

$user=User::create([ ... ]); 
Auth::login($user); 
$myid = Auth::id(); 
return redirect()->route('profile',['id'=>$myid]), 

而且我重定向到頁面,新的ID。

在web.php我寫

Route::get('/profile/{id}','[email protected]')->name('profile'); 

ProfileController秀我寫dump(Auth::user()),它顯示「空」我試着用會話。但會話不保存,它也顯示'空'。我試圖改變Kernel.php,但它沒有幫助。儘管Laravel自動使用此中間件,但我嘗試將所有路由移至中間件Web。當然,它也沒有幫助。我有這個問題。

+0

請嘗試'dump(Auth :: user())' – dparoli

+0

我的意思是Auth :: user()它顯示'null' – Laravelchik

+0

標準RegisterController已經登錄了一個新創建的用戶。你在控制器中寫了什麼代碼? – dparoli

回答

2

你應該看看這樣的:

dd(Auth::user()); 

或者:

dd(auth()->user()); 

,而不是像這樣:

dump(Auth::user) 
+0

我的意思驗證::用戶()它顯示'null'。我嘗試了dd(auth() - > user());整整一天我嘗試其他的事情( – Laravelchik

0

我會建議使用Auth::attempt($credentials);方法,而不是直接調用Auth :: login()。

Auth::attempt($credentials); 

將嘗試登錄用戶提供的憑據建立會話和所有,如果成功將返回true,如果失敗返回false。所以你可以馬上測試你的結果。

退房文檔:https://laravel.com/docs/5.4/authentication#authenticating-users

你也可以指定使用Auth::guard([any-guard])->attempt($credentials)保護。如果你不通過一個名字guard()它會使用默認的警衛。

另一個重要的事情是,您必須在創建密碼並將其傳遞給新用戶之前對其進行哈希處理。因爲像try()這樣的所有方法都會嘗試匹配散列版本的密碼。您可以散列你的密碼是這樣的:

Hash::make(<your-password>); 

記住添加use Hash;在文件的頭部或者附加類的名稱,像這樣一個反斜槓:\Hash::make(<your-password>)

PS:這僅適用於用戶創建時間。因爲Auth::attempt()會自動散列密碼。這意味着在傳遞密碼進行身份驗證之前,您不必擔心哈希密碼。

+0

在LoginContoller我試過很多東西'類的LoginController擴展控制器 { \t公共職能日誌(){ \t \t如果(AUTH ::嘗試([ '郵件'=>請求( '電子郵件' ), '密碼'=>請求( '密碼')])){ \t \t \t // $本身份識別碼=驗證:: ID(); \t \t \t \t //返回重定向() - >路線('剖面',['id'=> $ myid]); \t \t \t echo'dfgdfgdfgdfg'; \t \t} \t \t else { \t \t \t echo'no'; \t \t} \t \t dd(Auth :: user()); \t} \t }'但它不工作。我想我的會議有問題。會話不會保存。 – Laravelchik

+0

那麼,你粘貼的代碼的輸出是什麼?你是否得到了迴應?請記住,您必須在上面添加'use Auth;',以便在您的代碼中可用。 – MarkSkayff

+0

此外,另一件重要的事情是,你是否在將密碼保存到數據庫之前「散列」密碼?導致這個attempt()方法將散列密碼字段並用這個散列版本進行測試。當你將它傳遞給User :: create()時,你必須使用'Hash :: make(<你的密碼>)'。作爲答案的一部分添加了此答案,因爲它很有用。 – MarkSkayff