使用 .blade 文件在 Laravel 上开发第一个身份验证应用程序

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

所以我决定学习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') 命令中使用的电子邮件和密码(尝试过带引号和不带引号)

我很感激任何形式的帮助,因为我渴望学习,但基本上从一开始就遇到了问题

基本上,尝试在数据库中手动创建用户并登录该帐户,但遇到错误“提供的凭据与我们的记录不匹配!”我自己创造的。

当然,也构建了该项目以防万一(我不知道是否有必要,但只是为了以防万一)

laravel authentication controller laravel-blade
1个回答
0
投票

干得好。我想补充一点,无论您使用数据库、修补程序还是php的password_hash来加密密码,请确保数据流的所有部分的rounds属性都相同,因为每一轮都会输出不同的哈希值。对于框架,请参阅 config/hashing.php。

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