我在使用 Laravel 登录时遇到问题。每次用户登录时,它会将他们重定向到发布路由(空白页面)而不是主页,这是预期的路由。即使当我使用错误的凭据登录时,它也会转到发布路由。它甚至不显示错误消息。注销的重定向工作正常,只是我遇到问题的登录。
这是我的登录控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Auth;
use Redirect;
use Session;
class LoginController extends Controller
{
public function index()
{
return view('login');
}
public function login(Request $request)
{
$username = $request->input('username');
$password = $request->input('password');
if(Auth::attempt(['username' => $username, 'password' => $password, 'active' => 1])) {
$request->session()->regenerate();
session(['username' => 'username']);
return redirect()->intended('home');
}
else
{
Session::flash('alert-error', 'The username or password is incorrect. Please try again');
}
}
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return Redirect::route('login');
}
}
login.blade.php:
<!DOCTYPE html>
<html>
@include('layout.header')
<!-- Custom Styles -->
<link href="{{asset('css/stylesheet.css')}}" rel="stylesheet">
<body style="text-align:center;">
<br><br><br><br>
<div class="form">
<h2>LOGIN</h2>
<p>Please enter your credentials to login.</p>
<form action="{{route('login.post')}}" method="POST" class="form-group">
{{ csrf_field() }}
<input type="text" name="username" id="username" placeholder="Username" class="form-control" required/><br><br>
<input type="password" name="password" id="password" placeholder="Password" class="form-control" required/><br><br>
<button type="submit" name="login" id="login" class="btn btn-primary">login</button><br><br>
<a style="color:black;float:left;" href=" " >Change Password</a>
</form>
</div>
</body>
</html>
web.php(我的路线)
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/
Route::get('/', function () {
return view('login');
});
//login, logout routes
Route::get('login', 'App\Http\Controllers\LoginController@index')->name('login');
Route::post('/login/post',[App\Http\Controllers\LoginController::class, 'login'])->name('login.post');
Route::get('logout', 'App\Http\Controllers\LoginController@logout')->name('logout');
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
改为使用:
//or return redirect()->to('home')
return redirect()->route('home');
下面是intended()方法的代码:
public function intended($default = '/', $status = 302, $headers = [], $secure = null)
{
$path = $this->session->pull('url.intended', $default);
return $this->to($path, $status, $headers, $secure);
}
如果它在会话中有一个'url.intended'键,它总是会根据'url.intended'键的值进行重定向。在这种情况下,“url.intended”键的值是“登录”。