英文:
Laravel 10 custom login/registration not going to dashboard page
问题
我正在尝试创建自己的自定义 Laravel 10 登录/注册功能,因为我不想使用 Breez 包,我想学习如何自己制作登录/注册功能。
但我似乎无法通过仪表板页面的身份验证。我在我的仪表板函数中使用了一个 if 语句 if(Auth::check())
来在数据库中验证用户。
但对我来说,这不起作用,因为我在从重定向回登录页面时不断收到错误消息(只有在我将新用户注册到数据库时才会发生这种情况),但每当我尝试登录时,我仍然在登录页面上获得来自我的登录函数的成功消息(请参见下面的代码)。
AuthController(仪表板):
public function dashboard(): View
{
if(Auth::check()) {
return view('auth.dashboard');
}
return view('auth.login')->with('error', 'You are not allowed to access');
}
AuthController(登录):
public function loginPost(Request $request): RedirectResponse
{
$request->validate([
'email' => 'required',
'password' => 'required'
]);
$credentials = $request->only('email', 'password');
if(Auth::attempt($credentials)) {
$request->session()->regenerate();
return redirect()->intended(route('dashboard'))->with('success', 'You have successfully logged in');
}
return redirect(route('login'))->with('error', 'Oppes! You have entered invalid credentials');
}
web.php:
Route::get('/register', [AuthController::class, 'register'])->name('register');
Route::post('/register', [AuthController::class, 'registerPost'])->name('register.post');
Route::get('/login', [AuthController::class, 'login'])->name('login');
Route::post('/login', [AuthController::class, 'loginPost'])->name('login.post');
Route::get('/dashboard', [AuthController::class, 'dashboard'])->name('dashboard');
Route::post('/logout', [AuthController::class, 'logout'])->middleware('auth')->name('logout');
我尚未找到任何解决方案,所以如果有人可以帮助我,将不胜感激。
英文:
I am trying to make my own custom laravel 10 login/registration because i didn't want to use the breez package because i wanted to learn how do you make a login/registrasion by yourself.
But I cant seem to get past the authentication of the dashboard page.
I am using an if statment if(Auth::check())
on my dashboard function to authenticate the user in the database.
but for me this isn't working because i keep getting the error message from the redirect back to the login page (This only happens when I register a new user into the database) but whenever I try loging in I get the success message from my login function (See code futher down) while still being in the login page.
AuthController (Dashboard):
public function dashboard(): View
{
if(Auth::check()) {
return view('auth.dashboard');
}
return view('auth.login')->with('error', 'You are not allowed to access');
}
AuthController (Login):
public function loginPost(Request $request): RedirectResponse
{
$request->validate([
'email' => 'required',
'password' => 'required'
]);
$credentials = $request->only('email', 'password');
if(Auth::attempt($credentials)) {
$request->session()->regenerate();
return redirect()->intended(route('dashboard'))->with('success', 'You have successfully logged in');
}
return redirect(route('login'))->with('error', 'Oppes! You have entered invalid credentials');
}
web.php
Route::get('/register', [AuthController::class, 'register'])->name('register');
Route::post('/register', [AuthController::class, 'registerPost'])->name('register.post');
Route::get('/login', [AuthController::class, 'login'])->name('login');
Route::post('/login', [AuthController::class, 'loginPost'])->name('login.post');
Route::get('/dashboard', [AuthController::class, 'dashboard'])->name('dashboard');
Route::post('/logout', [AuthController::class, 'logout'])->middleware('auth')->name('logout');
I havn't found any solution yet so if someone can help me it will be very appreciated.
答案1
得分: 0
你的注销功能受到中间件的保护,你还需要为仪表板路由添加一个中间件,你可以将需要身份验证中间件的路由分组。
Route::middleware('auth')->group(function () {
Route::get('/dashboard', [AuthController::class, 'dashboard'])->name('dashboard');
Route::post('/logout', [AuthController::class, 'logout'])->name('logout');
});
英文:
hii your logout function is protected by middleware , you also need to add dashboard route a middleware you can group the routes that are required authentication middleware .
Route::middleware('auth')->group(function () {
Route::get('/dashboard', [AuthController::class, 'dashboard'])->name('dashboard');
Route::post('/logout', [AuthController::class, 'logout'])->name('logout');
});
答案2
得分: 0
您的路由
Route::get('login', [FrontendAuthController::class, 'loginGet'])->name('login');
Route::post('login', [FrontendAuthController::class, 'loginPost']);
Route::post('logout', [FrontendAuthController::class, 'logout'])->name('logout');
Route::get('register', [FrontendAuthController::class, 'registerGet'])->name('register');
Route::post('register', [FrontendAuthController::class, 'registerPost']);
您的控制器:
<?php
namespace App\Http\Controllers\Frontend;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Session;
class FrontendAuthController extends Controller
{
public function loginGet(Request $request)
{
return view('front.auth.login');
}
public function loginPost(Request $request)
{
$request->validate([
'email' => 'required|email',
'password' => 'required',
], [
'email.required' => '邮箱字段必填。',
'email.email' => '请输入有效的电子邮件地址。',
'password.required' => '密码字段必填。',
]);
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials)) {
return redirect()->intended('/');
} else {
return redirect()->back()->withErrors(['email' => '这些凭据与我们的记录不匹配。']);
}
}
public function logout()
{
Auth::logout();
Session::flush(); // 清除所有会话数据
Session::regenerate(); // 重新生成会话ID
return redirect()->route('login');
}
public function registerGet()
{
return view('front.auth.register');
}
public function registerPost(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:8|confirmed',
], [
'name.required' => '姓名字段必填。',
'email.required' => '邮箱字段必填。',
'email.email' => '请输入有效的电子邮件地址。',
'email.unique' => '此电子邮件地址已注册。',
'password.required' => '密码字段必填。',
'password.min' => '密码必须至少包含8个字符。',
'password.confirmed' => '密码确认不匹配。',
]);
// 创建新用户记录
$user = new User();
$user->name = $request->input('name');
$user->email = $request->input('email');
$user->password = Hash::make($request->input('password'));
$user->save();
// 登录新注册的用户
Auth::login($user);
// 将用户重定向到主页或其他所需页面
return redirect()->intended('/');
}
}
您的登录视图:
<!DOCTYPE html>
<html>
<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">
<title>登录</title>
<link rel="stylesheet" href="{{ url('frontend/css/style.css') }}">
</head>
<body>
<div class="main">
<section class="signup">
<div class="container">
<div class="signup-content">
<form id="signup-form" class="signup-form" method="POST" action="{{ url('login') }}">
@csrf
<h2 class="form-title">登录</h2>
<div class="form-group">
<input type="email" class="form-input" value="{{ old('email') }}" name="email"
id="email" placeholder="您的电子邮件" />
</div>
<div class="form-group">
<input type="text" class="form-input" name="password" id="password"
placeholder="密码" />
<span toggle="#password" class="zmdi zmdi-eye field-icon toggle-password"></span>
</div>
@error('email')
<div style="color: red">{{ $message }}</div>
@enderror
@error('password')
<div style="color: red">{{ $message }}</div>
@enderror
<div class="form-group">
<input type="submit" name="submit" id="submit" class="form-submit" value="登录" />
</div>
</form>
<p class="loginhere">
新用户? <a href="reg-form.html" class="loginhere-link">在这里注册</a>
</p>
</div>
</div>
</section>
</div>
</body>
</html>
您的注册视图:
<!DOCTYPE html>
<html>
<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">
<title>注册</title>
<link rel="stylesheet" href="{{ url('frontend/css/style.css') }}">
</head>
<body>
<div class="main">
<section class="signup">
<div class="container">
<div class="signup-content">
<form id="signup-form" class="signup-form" method="POST" action="{{ route('register') }}">
@csrf
<h2 class="form-title">注册</h2>
<div class="form-group">
<input type="text" class="form-input" value="{{ old('name') }}" name="name" id="name"
placeholder="您的姓名" />
</div>
<div class="form-group">
<input type="email" class="form-input" value="{{ old('email') }}" name="email"
id="email" placeholder="您的电子邮件" />
</div>
<div class="form-group">
<input type="password" class="form-input" name="password" id="password"
placeholder="密码" />
<span toggle="#password" class="zmdi zmdi-eye field-icon toggle-password"></span>
</div>
<div class="form-group">
<input type="password" class="form-input" name="password_confirmation"
id="password_confirmation" placeholder="确认密码" />
</div>
@error('name')
<div style="color: red">{{ $message }}</div>
@enderror
@error('email')
<div style="color: red">{{ $message }}</div>
@enderror
@error('password')
<div style="color: red">{{ $message }}</div>
@enderror
<div
<details>
<summary>英文:</summary>
Your Routes
Route::get('login', [FrontendAuthController::class, 'loginGet'])->name('login');
Route::post('login', [FrontendAuthController::class, 'loginPost']);
Route::post('logout', [FrontendAuthController::class, 'logout'])->name('logout');
Route::get('register', [FrontendAuthController::class, 'registerGet'])->name('register');
Route::post('register', [FrontendAuthController::class, 'registerPost']);
Your controller :
<?php
namespace App\Http\Controllers\Frontend;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Session;
class FrontendAuthController extends Controller
{
public function loginGet(Request $request)
{
return view('front.auth.login');
}
public function loginPost(Request $request)
{
$request->validate([
'email' => 'required|email',
'password' => 'required',
], [
'email.required' => 'The email field is required.',
'email.email' => 'Please enter a valid email address.',
'password.required' => 'The password field is required.',
]);
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials)) {
return redirect()->intended('/');
} else {
return redirect()->back()->withErrors(['email' => 'These credentials do not match our records.']);
}
}
public function logout()
{
Auth::logout();
Session::flush(); // Clear all session data
Session::regenerate(); // Regenerate the session ID
return redirect()->route('login');
}
public function registerGet()
{
return view('front.auth.register');
}
public function registerPost(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:8|confirmed',
], [
'name.required' => 'The name field is required.',
'email.required' => 'The email field is required.',
'email.email' => 'Please enter a valid email address.',
'email.unique' => 'This email address is already registered.',
'password.required' => 'The password field is required.',
'password.min' => 'The password must be at least 8 characters.',
'password.confirmed' => 'The password confirmation does not match.',
]);
// Create a new user record
$user = new User();
$user->name = $request->input('name');
$user->email = $request->input('email');
$user->password = Hash::make($request->input('password'));
$user->save();
// Log in the newly registered user
Auth::login($user);
// Redirect the user to the home page or any other desired page
return redirect()->intended('/');
}
}
Your Login blade
<!DOCTYPE html>
<html>
<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">
<title>Sign In</title>
<link rel="stylesheet" href="{{ url('frontend/css/style.css') }}">
</head>
<body>
<div class="main">
<section class="signup">
<div class="container">
<div class="signup-content">
<form id="signup-form" class="signup-form" method="POST" action="{{ url('login') }}">
@csrf
<!-- <img src="images/logo.svg" alt="">-->
<h2 class="form-title">Login Here</h2>
<div class="form-group">
<input type="email" class="form-input" value="{{ old('email') }}" name="email"
id="email" placeholder="Your Email" />
</div>
<div class="form-group">
<input type="text" class="form-input" name="password" id="password"
placeholder="Password" />
<span toggle="#password" class="zmdi zmdi-eye field-icon toggle-password"></span>
</div>
@error('email')
<div style="color: red">{{ $message }}</div>
@enderror
@error('password')
<div style="color: red">{{ $message }}</div>
@enderror
<div class="form-group">
<input type="submit" name="submit" id="submit" class="form-submit" value="Sign in" />
</div>
</form>
<p class="loginhere">
New User? <a href="reg-form.html" class="loginhere-link">Register here</a>
</p>
</div>
</div>
</section>
</div>
</body>
</html>
Your Register page
<!DOCTYPE html>
<html>
<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">
<title>Register</title>
<link rel="stylesheet" href="{{ url('frontend/css/style.css') }}">
</head>
<body>
<div class="main">
<section class="signup">
<div class="container">
<div class="signup-content">
<form id="signup-form" class="signup-form" method="POST" action="{{ route('register') }}">
@csrf
<h2 class="form-title">Register Here</h2>
<div class="form-group">
<input type="text" class="form-input" value="{{ old('name') }}" name="name" id="name"
placeholder="Your Name" />
</div>
<div class="form-group">
<input type="email" class="form-input" value="{{ old('email') }}" name="email"
id="email" placeholder="Your Email" />
</div>
<div class="form-group">
<input type="password" class="form-input" name="password" id="password"
placeholder="Password" />
<span toggle="#password" class="zmdi zmdi-eye field-icon toggle-password"></span>
</div>
<div class="form-group">
<input type="password" class="form-input" name="password_confirmation"
id="password_confirmation" placeholder="Confirm Password" />
</div>
@error('name')
<div style="color: red">{{ $message }}</div>
@enderror
@error('email')
<div style="color: red">{{ $message }}</div>
@enderror
@error('password')
<div style="color: red">{{ $message }}</div>
@enderror
<div class="form-group">
<input type="submit" name="submit" id="submit" class="form-submit" value="Register" />
</div>
</form>
<p class="loginhere">
Already have an account? <a href="{{ route('login') }}" class="loginhere-link">Login here</a>
</p>
</div>
</div>
</section>
</div>
</body>
</html>
I think This will solve your all queries
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论