我是 Laravel 的新手。 有人可以帮助我,我在控制器中使用中间件('auth')时遇到问题。中间件('auth')无法检测我的用户身份验证,因此我无法访问路由并返回登录页面。
这是我的代码
**登录视图 **
@include('templates.header')
<div class="row d-flex justify-content-center">
<div class="col my-5" style="max-width: 800px; max-height: 531px">
<div class="card mb-3" >
<div class="row g-0">
<div class="col-md-5" style="overflow: hidden">
<img src="img/if.undip.png" class="img-fluid rounded-start" style="object-fit: cover;">
</div>
<div class="col-md-7">
<div class="card-body ms-2">
<h5 class="card-title">Sign In</h5>
<hr>
<div class="mb-3">
@if (session()->has('loginError'))
<div class="alert alert-danger alert-dismissible fade show" role="alert">
{{ session('loginError') }}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
@endif
</div>
<form action="/login" method="post">
@csrf
<div class="mb-3">
<label for="username" class="form-label">Username</label>
<input type="text" class="form-control" id="username" aria-describedby="emailHelp" name="username">
</div>
<div class="mb-3">
<label for="password" class="form-label">Password</label>
<input type="password" class="form-control" id="password" name="password">
</div>
<div class="mb-3">
<div id="login_error" class="form-text"></div>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
@include('templates.footer')
**网络路线 **
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\LoginController;
Route::get('/', function () {
return view('dashboard.index');
})->middleware('auth');
Route::get('/login', [LoginController::class, 'index'])->name('login')->middleware('guest');
Route::post('/login', [LoginController::class, 'authenticate']);
Route::post('/logout', [LoginController::class, 'logout']);
**登录控制器 **
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\RedirectResponse;
use App\Models\User;
class LoginController extends Controller
{
public function index(){
return view('login.index', [
'title' => 'Login',
'active' => 'login'
]);
}
public function authenticate(Request $request){
$credentials = $request->validate([
'username' => 'required',
'password' => 'required',
]);
// dd(User::all());
if (Auth::attempt($credentials)) {
$request->session()->regenerate();
return redirect()->intended('/');
}
return back()->with('loginError', 'Login Failed!');
}
public function logout(Request $request): RedirectResponse
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}
}
顺便说一句,我正在使用自定义表,而不是使用默认 laravel 用户的迁移和种子。表名仍然是users,但是包含字段username和password。
有人可以帮我解决我的问题吗,谢谢。
我已经解决了这个问题,你需要像这样初始化模型中的主键名称
class User extends Authenticatable{
use HasApiTokens, HasFactory, Notifiable;
protected $primaryKey = 'username';
public $incrementing = false;
或
在用户表中添加列“id”