[英]How to manage Login/Logout in laravel using Auth
我已經在laravel中創建了一個登錄模塊,但我已經完成了手動驗證用戶身份並在儀表板頁面上重定向的問題,但是我的問題是當用戶從應用程序注銷時,如果他們再次嘗試打開該儀表板URL,那么它會這時在RouteCollection中顯示錯誤MethodNotAllowedHttpException,我想要的是如果用戶未通過身份驗證,那么它將直接重定向到我們的登錄頁面上。我也試圖在我的LoginController構造函數中放入一些邏輯,但它也不起作用。以下是我的文件路徑的代碼。
laravelproject \\ app \\ Http \\ routes.php
Route::auth();
Route::post('/login-submit', 'LoginController@loginSubmit');
Route::get('/log-out',[
'uses'=>'LoginController@logOut',
]);
laravelproject \\ app \\ Http \\ Controllers \\ LoginController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
//to take input from user
use App\Http\Requests;
use Illuminate\Http\Request;
//end
class LoginController extends Controller
{
public function loginSubmit(Request $request)
{
$email=$request->email;
$password=$request->password;
//var_dump($credentials);die;
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// Authentication passed...
return view('dashboard');
}
else
{
return view('auth/login');
}
}
public function logOut() {
Auth::logout();
return view('auth/login');
}
}
注銷並嘗試訪問RouteCollection中的儀表板URL MethodNotAllowedHttpException后出現錯誤
您需要在這里使用中間件。 在App \\ Http \\ middleware中創建一個中間件
class administrator
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ( Auth::check() && Auth::user()->isAdmin() )
{
return $next($request);
}
return redirect('signin');
}
}
現在,在web.php中,您可以將此中間件分配給儀表板路由,以便僅管理員可以訪問儀表板
Route::get('/', 'Dashboard@dashboard')->middleware(['administrator']);
對於Auth :: user()-> isAdmin(),在users表中將布爾字段定義為'admin',然后在User模型中定義isAdmin方法,如下所示:
public function isAdmin()
{
return $this->admin;
}
現在,該過程將被簡化。 無論您分配了哪個中間件管理員路由,都將為管理員驗證該路由。 驗證失敗時,它將把用戶發送到登錄頁面
維護您的用戶的會話,並在loginsubmit()函數中首先檢查是否存在使用會話,然后返回到儀表板視圖。 在注銷操作中,將用戶會話刷新為
public function loginSubmit(Request $request)
{
if (Session::has('user')) {
return view('dashboard');
}
$email=$request->email;
$password=$request->password;
//var_dump($credentials);die;
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// Authentication passed...
$authData = Auth::user();
$userData = $authData['original'];
Session::put('user', $authData['original']);
return view('dashboard');
}
else
{
return view('auth/login');
}
}
public function logOut() {
Auth::logout();
Session::forget('user');
return view('auth/login');
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.