Laravel 中间件('auth')

问题描述 投票:0回答:1

我是 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。

有人可以帮我解决我的问题吗,谢谢。

php laravel laravel-middleware
1个回答
0
投票

我已经解决了这个问题,你需要像这样初始化模型中的主键名称

class User extends Authenticatable{
use HasApiTokens, HasFactory, Notifiable;

protected $primaryKey = 'username';
public $incrementing = false;

在用户表中添加列“id”

© www.soinside.com 2019 - 2024. All rights reserved.