laravel-6 - 使用管理员保护成功登录后没有身份验证值
问题描述
有人可以帮我理解我做错了什么吗?
这是我的config/auth.php文件
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
]
这是我用于管理员登录的 LoginController
namespace App\Http\Controllers\Admin\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Redirect;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
use AuthenticatesUsers;
public function __construct()
{
$this->middleware('guest:admin');
}
/**
* Function to show login form
*/
public function fnToShowAdminLoginForm(){
return view('Admin.Auth.loginForm');
}
/**
* Function to check login credentials
*/
public function fnToSubmitAdminLogin(Request $request){
$messsages = array(
'emailOrphone.required'=>'You cant leave Email/Phone field empty',
'password.required'=>'You cant leave password field empty',
);
$rules = array(
'emailOrphone'=>'required',
'password'=>'required',
);
$validator = \Validator::make($request->all(), $rules,$messsages);
if ($validator->fails()) {
return back()->withInput()->withErrors($validator->errors());
}else{
if(Auth::guard('admin')->attempt(['email' => filter_var($request->emailOrphone, FILTER_VALIDATE_EMAIL ), 'password' => $request->password],true) ){
//dd(Auth::guard('admin')->user()->name);////**Here i am getting the auth**
return Redirect::intended('admin/login');
}else{
return back()->withInput()->withErrors(['upWorng'=>'Email/Phone Or Password does not match']);
}
}
}
}
这是我的路线 web.php
Route::prefix('/admin')->name('admin.')->namespace('Admin')->group(function(){
Route::namespace('Auth')->group(function(){
Route::get('login','LoginController@fnToShowAdminLoginForm')->name('dologin');
Route::post('login','LoginController@fnToSubmitAdminLogin');
Route::get('logout','LogoutController@dologout')->name('dologout');
});
Route::group(['middleware' => 'auth:admin'], function () {
Route::get('colorList/master','ColorController@index')->name('color');
Route::post('createColorMaster','ColorController@fnToCreateNewColor')->name('createColor');
});
这是我成功登录 ColorController.php 后点击的控制器
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Colors;
use Validator;
use Illuminate\Support\Facades\Auth;
use Session;
class ColorController extends Controller
{
protected $loggedUser;
public function __construct(){
$this->middleware('auth:admin');
dd(\Auth::guard('admin')->user());////I am not getting the auth here
//$this->loggedUser = Auth::guard('admin')->user()->id;
}
public function index(){
$colors = Colors::orderBy('color','ASC')->get();
return view('Admin.Master.Color',compact('colors'));
}
}
这是我的 RedirectIfAuthenticated 中间件
namespace App\Http\Middleware;
use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
//dd(Auth::guard($guard));
if ('admin' === $guard) {
return redirect(route('admin.color'));
}
return redirect('/');
}
return $next($request);
}
}
我可以成功登录,但是当我redirect()->intended() 或 redirect()->to() 时,Auth::guard('admin')不存储任何值。我想不通。我正在使用 laravel 6.9.0 并且不知道为什么这不起作用,我做错了什么。提前谢谢..!
解决方案
您的LoginController
扩展Controller
和使用AuthenticatesUsers
. 这意味着您拥有默认的 laravel 身份验证系统。但是后来,你开始发明自己的轮子,为什么?例如,您需要显示您的登录表单而不是默认的。showLoginForm
没问题,将方法从特征复制AuthenticatesUsers
到您的LoginController
并编辑返回视图。
您需要编辑验证,将方法validateLogin
从 trait复制AuthenticatesUsers
到您的LoginController
. 在所有地方继续以相同的方式(注册、验证等)。
不要与框架抗争,让他为你工作。
推荐阅读
- codeigniter - 如何添加警报以登录我的登录页面,例如“登录成功”?
- zapier - 如何自动回复 Gmail 电子邮件
- oracle - Oracle - 加入 2 个时间段
- jquery - 如何减少变量的值?
- angular - 在 Angular 中,我想获取一些 div 但纯 html 元素而不是自定义元素的 html 如何实现这一点?
- android - SQLite 给出空指针
- linux - PowerShell 中的 grep 和 sed 等效项
- angular - Ionic3 ActionSheet:如何使用来自 Fontawesome 的自定义图标?
- java - 片段中的 CRUD SQLite
- python - Python 代码贯穿整个 switcher 语句