簡體   English   中英

如何使用Auth管理laravel中的登錄/注銷

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM