Laravel Auth 注销不起作用 - 之前发布的此问题的答案不起作用

标签 laravel laravel-8

我开发了用于身份验证学习目的的小型应用程序,其中一切正常,登录注销和仪表板页面。但是

案例1一旦点击注销后,尝试通过在浏览器中编辑网址来访问仪表板页面,它会转到错误的仪表板页面。

案例2当我清除缓存和浏览数据并尝试访问仪表板时,它工作正常并重定向登录,这是正确的。

我正在使用 Auth::logout 进行注销。以下是我的代码

web.php

Route::get('/', function () {
    return view('welcome');
});
Route::get('/login','AuthenticationController@login')->name('login');

Route::post('/login.submit','AuthenticationController@getLogIn')->
name('login.submit');

Route::get('/register','AuthenticationController@register')->name('register');

Route::post('/register.submit','AuthenticationController@addUser')->
name('register.submit');

Route::get('/logout','AuthenticationController@logout')->name('logout');

Route::group(['middleware'=>'auth:user'],function(){

    Route::get('/dashboard','AuthenticationController@dashboard')->
    name('dashboard');

});

配置/auth.php

'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],


   
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],

        'user' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User1::class,
        ],

       
    ]

AuthenticationController.php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Validator;
use App\Models\User1;
use Illuminate\Support\Facades\Auth; 
use Session;

class AuthenticationController extends Controller
{
    //
    public function __construct()
    {
        
    }


    public function login()
    {
        return view('login');
    }
    public function register()
    {
        return view('register');
    }
    public function addUser(Request $request)
    {
        $input=$request->all();

        
        $Validator=Validator::make($input,$this->getRegisterRules($input));
        if($Validator->fails())
        {
            return redirect()->back()->withInput()->withErrors($Validator->messages());
        }

        $input['password']=bcrypt($input['password']);
        $user=User1::Create($input);
        if($user->exists)
        {
            return redirect()->route('login')->with('success','User created successfully! Kindly login');
        }
    }
    private function getRegisterRules($input) {
        $return = array();
        $return['fname'] = 'required|min:4|max:20';
        $return['lname'] = 'required|min:4|max:20';
        $return['email'] = 'required|email';
        $return['password'] = 'required|min:4|max:20|confirmed';
        return $return;
    }
    private function messages() {
        return [
            // 'question.required'  => 'The question field is required.'
        ];
    }
    public function dashboard()
    {
        return view('dashboard');
    }
     public function getLogIn(Request $request)
    {
        $input=$request->all();

        $Validator=Validator::make($input,$this->getLoginRules($input));
        if($Validator->fails())
        {
            return redirect()->back()->withInput()->withErrors($Validator->messages());
        }
        
        if(Auth::guard('user')->attempt(['email'=>$request->email,
            'password'=>$request->password],$request->remember))
        {
            return redirect()->route('dashboard');
        }

        return redirect()->back()->withInput()->withErrors('Invalid user name or password!');

    }
    public function getLoginRules($input)
    {
        $return=array();

        $return['email']='required|email';
        $return['password']='required|min:4|max:20';
        return $return;
    } 
    public function logout()
    {
        Auth::logout();
        Session::flush();
        return redirect()->route('login')->with('success','You have logged out!');
    }  
}

应用程序/模型/User1.php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User1 extends Authenticatable
{
    use HasFactory;
    protected $fillable=[
        'fname',
        'lname',
        'email',
        'password'
    ];

    protected $hidden = [
        'password',
        'remember_token',
    ];
}

登录.blade.php

<!DOCTYPE html>
<html>
<head>
  <link href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<title>Login</title>
</head>
<body>


<div class="wrapper fadeInDown">
  <div id="formContent">
    <!-- Tabs Titles -->
    @if(session()->has('success'))
    <div class="alert-success">
      {{session('success')}}
    </div>
    @endif
  <!-- Login Form -->
    
    @if($errors->any())
      <div class="alert-danger">
      {{$errors->first()}}
      </div>
    @endif

    <form method="POST" action="{{url('login.submit')}}">
      
      <input type="text" id="login" class="fadeIn second" name="email" placeholder="Username">
      @if($errors->has('email'))
      <div class="alert-danger">
      {{$errors->first('email')}}
      </div>
      @endif
      
      @csrf
      <input type="password" id="password" class="fadeIn third" 
      name="password" placeholder="Password">
      @if($errors->has('password'))
      <div class="alert-danger">
      {{$errors->first('password')}}
      </div>
      @endif
      
      <input type="submit" class="fadeIn fourth" value="Log In">
      
      <input type="checkbox" id="remember" name="remember"  value="1" checked="">&nbsp;&nbsp;&nbsp;Remember me
    </form>

    <!-- Remind Passowrd -->
    <div id="formFooter">
      <a class="underlineHover" href="#">Forgot Password?</a>&nbsp;&nbsp;&nbsp;
      <a class="underlineHover" href="{{url('register')}}">SignUp</a>
    </div>

  </div>
</div>
</body>
</html>

仪表板.blade.php

<!DOCTYPE html>
<html>
<head>
  <link href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
 <title>Dashboard</title>
</head>
<body>


    <div class="wrapper fadeInDown">
  <?php //dd(session()->all()); ?>
  <div id="formContent">
    Welcome To Dashboard
  </div>
  <form action="{{url('logout')}}" method="GET"> 
    <input type="submit" name="Submit" value="Logout">
  </form>


</div>
</body>
</html>

当我尝试在dashboard.blade.php中dd(session->all())时,以下是输出

array:5 [▼
  "_token" => "Uz8bUpJry6majKAb3yW7FuYqgjppzqroJqjcMPq4"
  "url" => array:1 [▶]
  "_previous" => array:1 [▶]
  "_flash" => array:2 [▶]
  "login_user_59ba36addc2b2f9401580f014c7f58ea4e30989d" => 7
]

以下是路线列表

enter image description here

最佳答案

我对代码行进行了一项更改,我的问题得到了解决。

Auth::logout() 更改为 Auth::guard('user')->logout();

关于Laravel Auth 注销不起作用 - 之前发布的此问题的答案不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68797519/

相关文章:

php - Laravel 8 迁移 "General error: 1215 Cannot add foreign key constraint"

php - 如何使用 Eloquent 模型从 Laravel 表中获取不同的记录?

javascript - 无法解决Ajax、PHP、Json、Laravel(PHP框架)中的代码

php - Laravel 5.1 - 模型工厂错误种子

laravel - 在 laravel 8 中使用 npm 安装和使用任何 js/css 库的工作流程是什么?

laravel-8 - 如何在laravel中去除急流并强化?

Laravel Eloquent 地从 json 列的值中过滤

php - 在 Laravel 5 中更改密码重置重定向链接

laravel - 我在 Ubuntu 20.04 上得到 "laravel: command not found"

laravel - 在 Laravel 中处理文本/纯文本请求(通过 navigator.sendBeacon 发送)