【问题标题】:SESSION in laravel for page protectionLaravel 中的 SESSION 用于页面保护
【发布时间】:2021-07-17 06:20:55
【问题描述】:

我想在 laravel 8 中创建一个登录注册系统。其中用户在登录时只能访问特定页面,否则重定向到登录页面。我就是那样做的。有什么问题。

//登录代码

 function login(Request $req){
        $results = DB::table('crud_users')
        ->where('email', '=', $req -> post('email'))
        ->where('password', '=', $req -> post('password'))
        ->get();
        foreach ($results as $value) {
            $value ->email;
            $value ->password;
            $name = $value ->name;
            $user_type = $value ->user_type;
            echo $id = $value ->id;
            session()->put('id', $id);
            session()->put('name', $name);
        }
        $req -> validate([
            'email' => 'required',
            'password' => 'required',
        ]);
        $email = $req -> input('email');
        $password = $req -> input('password');
        if ($user_type == 'admin') {
            if (($email == $value ->email) && ($password == $value->password)) {
            return redirect('admin');
            }
        } else if($user_type == 'user') {
            if (($email == $value ->email) && ($password == $value->password)) {
            return redirect('user');
        } else{
            return redirect('login');
        }
        
        
        
        // session()->flash('success','You are registered! Please login!');
        // return redirect('login');

    }
}

//会话代码

if (session()->has('id')) {
Route::get('logout','App\Http\Controllers\User@logout');
Route::view('user','user');
Route::view('admin','admin');
Route::view('edit/{id}','edit/{id}');
}else{
    Route::get('/', function () {
    return view('welcome');
});

【问题讨论】:

  • 欢迎来到 SO ... 我认为您应该研究 laravel 中间件并了解有关 laravel 的更多信息

标签: php laravel session


【解决方案1】:

您可以使用auth() 中间件进行登录验证。 欲了解更多信息https://laravel.com/docs/7.x/authentication

【讨论】:

    【解决方案2】:

    我总是使用如下代码

    Session::put('id',$id);
    
    Session::put('name',$name);
    

    在你的条件值中你必须使用 like

    if(Session::get('id')!=''){
        Route::get('logout','App\Http\Controllers\User@logout');
        ...
    }
    else{
        return redirect('/');
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用 laravel8 中的默认身份验证使用 laravel 应用程序 Jetstream starter kit 并使用 auth() 中间件转到特定页面。 你可以看到这个[blog]1

      或查看来自 [here]2 的 laravel 文档

      对于您的代码,我认为您通过这种方式调用session session() 这是错误的,您应该调用会话类或使用这种方式$request->session()->has('id')

      Session::has('id')
      

      【讨论】:

        猜你喜欢
        • 2016-10-09
        • 1970-01-01
        • 2016-04-15
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        • 1970-01-01
        • 2012-11-06
        相关资源
        最近更新 更多