Laravel 5.8 Auth::guard()->check() 总是返回 false

时间:2021-04-05 07:03:47

标签: php laravel authentication

我使用 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,
    ];

我做错了什么?帮帮我,谢谢!

2 个答案:

答案 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)` 
  1. 如果您希望在整个应用程序中使用新创建的 admin 守卫,您可以更改配置文件的 defaults 中的值。

  1. 如果只有 AuthController 使用 Laravel 内置的 Auth 系统,你可以在 AuthController.phpPasswordController.php 中添加这一行em> :
    protected $guard = 'admin';

Ref - 检查 Guard 自定义 here


  1. 如果您希望为任何与身份验证相关的任务提供除默认保护之外的保护,您可以像这样手动指定它:
    // 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
    }

参考 - https://laravel.com/docs/5.2/authentication