注册账号成功后如何路由登录?

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

**我一直在尝试登录并注册我们制作的网站。我正在使用 vs code 和 laravel Blade 模板。

这是我的登录代码:**

<?php
session_start();

$validationRules = [
    'email' => ['required', 'email'],
    'password' => ['required', 'regex:/^[A-Za-z0-9\s-_]+$/']
];

$errors = [];

if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    foreach ($validationRules as $field => $rules) {
        foreach ($rules as $rule) {
            switch ($rule) {
                case 'required':
                    if (empty($_POST[$field])) {
                        $errors[$field] = ucfirst($field) . ' is required.';
                    }
                    break;
                case 'email':
                    if (!filter_var($_POST[$field], FILTER_VALIDATE_EMAIL)) {
                        $errors[$field] = 'Invalid email format.';
                    }
                    break;
                case 'regex':
                    if (!preg_match('/^[A-Za-z0-9\s-_]+$/', $_POST[$field])) {
                        $errors[$field] = ucfirst($field) . ' contains invalid characters.';
                    }
                    break;
            }
        }
    }
}    


?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="StyleLogin.css">
    
    <title>Style Sync Login Page</title>
</head>
<body>
    
    <div class="card">
        <div class="card-header">
            <img src="{{ asset('logo.png') }}" alt="Style Sync Logo">
            <div class="title-container">
            <h1>Account Login</h1>
        </div>
        <div class="card-body">
            <?php if (!empty($errors)): ?>
                <div class="alert alert-danger">
                    <ul>
                        <?php foreach ($errors as $error): ?>
                            <li><?= $error ?></li>
                        <?php endforeach; ?>
                    </ul>
                </div>
            <?php endif; ?>
            <form action="login" method="POST">
                @csrf
                <div class="form-group">
                    <label for="email">Email</label>
                    <input type="email" id="email" name="email" required>
                </div>
                <div class="form-group">
                    <label for="password">Password</label>
                    <input type="password" id="password" name="password" required>
                </div>
                <button type="submit">Login</button>
            </form>
            <p>Don't have an account?<a href="{{ route('registration') }}">Register an Account</a></p>
        </div>
    </div>
</body>
</html>

然后这就是我在登录控制器上的内容:

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;

class LoginController extends Controller
{
    public function showLoginForm()
    {
        return view('auth.login');
    }

    public function login(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'email' => 'required|email',
            'password' => 'required',
        ]);

        if ($validator->fails()) {
            return redirect()->route('login')->withErrors($validator)->withInput();
        }

        if (Auth::attempt(['email' => $request->email, 'password' => $request->password])) {
            return redirect()->route('dashboard');
            
        } else {
            return redirect()->route('login')->with('error', 'Invalid email or password');
        }
    }
}

这是注册码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Style Sync Registration Page</title>
    <link rel="stylesheet" href="StyleRegistration.css">
</head>
<body>
    <div class="card">
        <div class="card-header">
            <img src="{{ asset('logo.png') }}" alt="Style Sync Logo">
            <h1>Account Registration</h1>
        </div>
        <div class="card-body">
            <form method="POST" action="{{ route('registration') }}">
                @csrf
                <div>
                    <label for="name">Name</label>
                    <input id="name" type="text" name="name" value="{{ old('name') }}" required>
                    @error('name')
                        <div class="error">{{ $message }}</div>
                    @enderror
                </div>
                <div>
                    <label for="email">Email</label>
                    <input id="email" type="email" name="email" value="{{ old('email') }}" required>
                    @error('email')
                        <div class="error">{{ $message }}</div>
                    @enderror
                </div>
                <div>
                    <label for="password">Password</label>
                    <input id="password" type="password" name="password" required>
                    @error('password')
                        <div class="error">{{ $message }}</div>
                    @enderror
                </div>
                <div>
                    <label for="password_confirmation">Confirm Password</label>
                    <input id="password_confirmation" type="password" name="password_confirmation" required>
                </div>
                <button type="submit">Register</button>
            </form>
            <p>Already have an account? <a href="{{ route('login') }}">Login here!</a></p>
        </div>
    </div>
</body>
</html>

那么这就是注册控制器

<?php

namespace App\Http\Controllers\Auth;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use App\Models\User;
class RegistrationController extends Controller
{
    public function showRegistrationForm()
    {
        return view('auth.registration');
    }

    public function register(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:8|confirmed',
        ]);

        if ($validator->fails()) {
            return redirect()->route('registration')->withErrors($validator)->withInput();
        }
        User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => bcrypt($request->password),
        ]);

        return redirect()->route('login')->with('success', 'Registration successful! Please login.');
    }
}

这是web.php路由

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Auth\LoginController;
use App\Http\Controllers\Auth\RegistrationController;
use App\Http\Controllers\DashboardController;

Route::get('/', function () {
    return view('welcome');
});

Route::get('/login', [LoginController::class, 'showLoginForm'])->name('login');
Route::post('/login', [LoginController::class, 'login']);

Route::get('/registration', [RegistrationController::class, 'showRegistrationForm'])->name('registration');
Route::post('/registration', [RegistrationController::class, 'registration']);

Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');

我尝试了不同的路由,但仍然不起作用 这是弹出的错误: 调用未定义方法 App\Http\Controllers\Auth\RegistrationController::registration()

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

错误“Call to undefined method App\Http\Controllers\Auth\RegistrationController::registration()”表示Laravel无法在RegistrationController中找到名为registration()的方法。

查看你的RegistrationController,负责处理注册过程的方法名为register(),而不是registration()。因此,当您尝试在路由文件中调用 Registration() 时,Laravel 会抛出错误,因为该方法不存在。

要解决此问题,您需要更新路由文件 (web.php) 以在注册路由中使用正确的方法名称 (register()):

Route::post('/registration', [RegistrationController::class, 'register']);
© www.soinside.com 2019 - 2024. All rights reserved.