繁体   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