php - Laravel 自定义管理员登录不起作用
问题描述
我一直在开发一个 Laravel 身份验证系统,其中有一个管理面板,我必须创建一个自定义管理员身份验证系统。完成所有步骤后,登录系统无法正常工作。提交登录表单后,它再次将我重定向到相同的登录页面,而不是重定向到仪表板页面。我正在提供我整个系统的详细信息。
让我知道是否有人可以提供帮助。
管理模型
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Admin extends Authenticatable
{
use HasFactory;
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
管理数据库迁移
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateAdminsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('admins', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('admins');
}
}
配置\Auth.php
<?php
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Models\Admin::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
'admins' => [
'provider' => 'admins',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
],
'password_timeout' => 10800,
];
登录.Blade.php
@extends('layouts.app')
@section('pagetitle', 'Admin-Login')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card raleway">
<div class="card-header text-center font-weight-bold"><i class="fas fa-lock"></i> {{ __('Admin Login') }}</div>
<div class="card-body" style="padding-top:10%;padding-bottom:10%;">
<form method="POST" action="{{ route($loginRoute) }}">
@csrf
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ old('email') }}" required autofocus>
@if ($errors->has('email'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('email') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control{{ $errors->has('password') ? ' is-invalid' : '' }}" name="password" required>
@if ($errors->has('password'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('password') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group row">
<div class="col-md-6 offset-md-4">
<div class="form-check">
<input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
<label class="form-check-label" for="remember">
{{ __('Remember Me') }}
</label>
</div>
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-8 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Login') }}
</button>
@if (Route::has('password.request'))
<a class="btn btn-link" href="{{ route($forgotPasswordRoute) }}">
{{ __('Forgot Your Password?') }}
</a>
@endif
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
登录控制器.php
<?php
namespace App\Http\Controllers\Admin\Auth;
use Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Foundation\Auth\ThrottlesLogins;
class LoginController extends Controller
{
/**
* Show the login form.
*
* @return \Illuminate\Http\Response
*/
public function showLoginForm()
{
return view('admin.login',[
'loginRoute' => 'admin.login',
'forgotPasswordRoute' => 'admin.password.request',
]);
}
/**
* Login the admin.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*/
public function login(Request $request)
{
$this->validator($request);
if(Auth::guard('admin')->attempt($request->only('email','password'),$request->filled('remember'))){
//Authentication passed...
return redirect()
->intended(route('admin.dashboard'))
->with('status','You are Logged in as Admin!');
}
//Authentication failed...
return $this->loginFailed();
}
/**
* Logout the admin.
*
* @return \Illuminate\Http\RedirectResponse
*/
public function logout()
{
Auth::guard('admin')->logout();
return redirect()
->route('login')
->with('status','Admin has been logged out!');
}
/**
* Validate the form data.
*
* @param \Illuminate\Http\Request $request
* @return
*/
private function validator(Request $request)
{
//validation rules.
$rules = [
'email' => 'required|email|exists:admins|min:5|max:191',
'password' => 'required|string|min:4|max:255',
];
//custom validation error messages.
$messages = [
'email.exists' => 'These credentials do not match our records.',
];
//validate the request.
$request->validate($rules,$messages);
}
/**
* Redirect back after a failed login.
*
* @return \Illuminate\Http\RedirectResponse
*/
private function loginFailed()
{
return redirect()
->back()
->withInput()
->with('error','Login failed, please try again!');
}
}
网页.php
Route::prefix('/admin')->name('admin.')->namespace('Admin')->group(function(){
Route::get('/dashboard', [App\Http\Controllers\Admin\DashboardController::class, 'index'])->name('dashboard');
Route::namespace('Auth')->group(function(){
//Login Routes
Route::get('/login',[App\Http\Controllers\Admin\Auth\LoginController::class,'showLoginForm'])->name('login');
Route::post('/login',[App\Http\Controllers\Admin\Auth\LoginController::class,'login']);
Route::post('/logout',[App\Http\Controllers\Admin\Auth\LoginController::class,'logout'])->name('logout');
});
});
解决方案
解决方案
所以我今天解决了我的问题。问题是由于我的 AdminDashboardController.php 中的以下函数而发生的
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
取出后。现在一切正常。
推荐阅读
- tableau-api - 根据过滤器更改日期格式
- python - 比多个 if 语句处理变量设置更简洁的解决方案
- laravel - 在某些页面上插入页脚的最佳方法 Laravel
- mongodb - 什么是 err := db.Model(&users).Where("id in (?)", pg.In(ids)).Select() in mongodb
- php - ApiPlatform - 规范化后将 DTO 的字段传递给不同的服务
- kubernetes - kubectl 输出格式化:查找特定列
- javascript - 根据另一个对象数组中的值在 Angular 11 应用程序中创建一个新对象
- c# - 修改后为 AD 注释属性添加值
- reactjs - 用于上下文更新的正确 React 架构
- python - 如何在 TF 中随机将元素设置为零?