我使用 Auth::guard 身份验证。
我输入了正确的电子邮件和密码,但它仍然返回 false !
但是 Auth::guard($guard)->attempt($dataLogin)
返回 true
。我找不到解决办法。
这是登录控制器文件:
<?php
namespace App\Http\Controllers\Web;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
class adminController extends Controller
{
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
const ALL_GUARD = ['admin'];
public function guard()
{
return Auth::guard('admin');
}
function login(Request $request)
{
$dataLogin = $request->only(['email', 'password']);
foreach (self::ALL_GUARD as $guard) {
dd(Auth::guard($guard)->attempt($dataLogin));
if (Auth::guard($guard)->attempt($dataLogin)) {
return redirect('/'.$guard.'/');
}
}
return redirect('/login')->with('error', 'error!');
}
public function showLoginForm()
{
return view('auth.login');
}
}
这里是访客中间件:
<?php
namespace App\Http\Middleware;
use App\Traits\ResponseTrait;
use Closure;
use Illuminate\Support\Facades\Auth;
class adminLogin
{
const GUARD_ADMIN = 'admin';
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
use ResponseTrait;
public function handle($request, Closure $next)
{
if (Auth::guard(self::GUARD_ADMIN)->check()) {
return $next($request);
}
return abort(401);
}
}
内核.php:
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'admin' => \App\Http\Middleware\adminLogin::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
我做错了什么?帮帮我,谢谢!
答案 0 :(得分:0)
对于登录尝试,请尝试 Auth::attempt($credentials)
而不是
Auth::guard()->attempt()
从 laravel doc https://laravel.com/docs/8.x/authentication#authenticating-users
答案 1 :(得分:0)
试试这个
Auth::guard()->attempt($dataLogin);
或者这个
Auth::guard('admin')->attempt($dataLogin)`
admin
守卫,您可以更改配置文件的 defaults 中的值。 protected $guard = 'admin';
Ref - 检查 Guard 自定义 here
// For route middleware
Route::get('something', [
'middleware' => 'auth:admin',
'uses' => 'somethigController@show'
]);
// For manually logging the user in
if (Auth::guard('admin')->attempt($credentials)) {
// Authenticated...
}
// To login specific user using eloquent model
Auth::guard('admin')->login($user);
// For getting logged in user
Auth::guard('admin')->user();
// To check if user is logged in
if (Auth::guard('admin')->check()) {
// Logged in
}