我开发了用于身份验证学习目的的小型应用程序,其中一切正常,登录注销和仪表板页面。但是
案例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=""> Remember me
</form>
<!-- Remind Passowrd -->
<div id="formFooter">
<a class="underlineHover" href="#">Forgot Password?</a>
<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
]
以下是路线列表
最佳答案
我对代码行进行了一项更改,我的问题得到了解决。
Auth::logout() 更改为 Auth::guard('user')->logout();
关于Laravel Auth 注销不起作用 - 之前发布的此问题的答案不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68797519/