所以我决定学习Laravel。我已经构建了一些小型应用程序,但现在,我决定自己构建一个小型 CMS,并且我几乎在一开始就面临着一个问题。我创建了一个 AuthController,创建了路由并使用 .blade.php 创建了一个登录表单
现在,当我尝试登录时,出现错误:提供的凭据与我们的记录不匹配! (当然是我自己造成的错误)
我不知道是我漏掉了什么还是写错了什么,但我就是无法登录。
这些是我的代码:
web.php:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AuthController;
Route::get('/', function () {
return view('welcome');
});
// Login
Route::get('/login', [AuthController::class, 'showLoginForm'])->name('login.form');
Route::post('/login', [AuthController::class, 'login'])->name('login.submit');
// Logout
Route::get('/logout', [AuthController::class, 'logout'])->name('logout');
AuthController.php:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\RedirectResponse;
class AuthController extends Controller
{
public function showLoginForm()
{
return view('auth.login');
}
public function login(Request $request): RedirectResponse
{
$credentials = $request->validate([
'email' => ['required', 'email'],
'password' => ['required'],
]);
$remember = $request->has('remember');
if(Auth::attempt($credentials, $remember)) {
$request->session()->regenerate();
return redirect()->intended('/'); // Redirects to home page after log in
}
return back()->withErrors([
'email' => 'The provided credentials do not match our records!'
])->onlyInput('email');
}
public function logout(Request $request): RedirectResponse
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}
}
登录.blade.php:
@extends('layouts.auth')
@section('content')
<div class="">
<a class="">
PI Blog
</a>
@if ($errors->any())
<div class="">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="">
<div class="p-6 space-y-4 md:space-y-6 sm:p-8">
<h1 class="">
Sign in to your account
</h1>
<form class="" action="{{ route('login.submit') }}" method="post">
@csrf
<div>
<label for="email" class="">Your email</label>
<input type="email" name="email" id="email" class="" placeholder="[email protected]" required>
</div>
<div>
<label for="password" class="">Password</label>
<input type="password" name="password" id="password" placeholder="••••••••" class="" required="">
</div>
<div class="">
<div class="">
<div class="">
<input id="remember" aria-describedby="remember" type="checkbox" class="">
</div>
<div class="ml-3 text-sm">
<label for="remember" class="">Remember me</label>
</div>
</div>
<a href="#" class="">Forgot password?</a>
</div>
<button type="submit" class="">Sign in</button>
<p class="">
Don’t have an account yet? <a href="#" class="">Sign up</a>
</p>
</form>
</div>
</div>
</div>
@endsection
2023_10_22_192933_create_users_table.php:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->foreignId('role_id')->constrained()->onDelete('cascade');
$table->string('username')->unique();
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('users');
}
};
为了更好的可读性,我删除了 BLADE 中的所有 TAILWIND 类别!所有课程都只是顺风课程!
我在这里遗漏了什么吗?如果有的话,我已经使用 bcrypt('password') 生成了一个密码,并将其手动添加到我的数据库中,无需任何播种,这就是我的用户在数据库中的基本外观:
id: 1
role_id: 1
username: user
email: [email protected]
email_verified_at: 2023-10-24 21:07:05
password: $2y$10$RKa.O9wZSchX9XUgGr0O6OlDI49Tsv2T7JQDTN96/de7sKLsB0AbG
remember_token: NULL
created_at: 2023-10-24 21:05:05
updated_at: 2023-10-24 21:05:05
当我登录时 - 我提供了在 bcrypt('password') 命令中使用的电子邮件和密码(尝试过带引号和不带引号)
我很感激任何形式的帮助,因为我渴望学习,但基本上从一开始就遇到了问题
基本上,尝试在数据库中手动创建用户并登录该帐户,但遇到错误“提供的凭据与我们的记录不匹配!”我自己创造的。
当然,也构建了该项目以防万一(我不知道是否有必要,但只是为了以防万一)
干得好。我想补充一点,无论您使用数据库、修补程序还是php的password_hash来加密密码,请确保数据流的所有部分的rounds属性都相同,因为每一轮都会输出不同的哈希值。对于框架,请参阅 config/hashing.php。