php 处理程序类错误- Laravel

yacmzcpb  于 2023-01-04  发布在  PHP
关注(0)|答案(4)|浏览(107)

我正在使用Laravel 5.5,并试图实现用户和管理员的多重身份验证。当我试图在浏览器中调用管理员登录表单时,我得到了这个错误。
错误:
应用程序\异常\处理程序::未认证($request,应用程序\异常\认证异常$exception)的声明应与照明\基础\异常\处理程序::未认证($request,照明\授权\认证异常$exception)兼容
下面是我在app/Exceptions/Handler中的未验证函数:

protected function unauthenticated($request, AuthenticationException $exception)
    {
        if ($request->expectsJson()) {
            return response()->json(['error' => 'Unauthenticated.'], 401);
        }
        $guard = array_get($exception->guards(), 0);
        switch ($guard) {
            case 'admin':
                $login = 'admin.login';
                break;
            default:
                $login = 'login';
                break;
        }
        return redirect()->guest(route($login));
    }

请帮助我解决这个问题。

4zcjmb1e

4zcjmb1e1#

您忘记在文件顶部添加use Illuminate\Auth\AuthenticationException

fzsnzjdm

fzsnzjdm2#

我正在使用Laravel 7.X
我更喜欢在Authenticate中间件中执行此操作
我做得很像贝娄,它对我很有效。

namespace App\Http\Middleware;

use Closure;
use Illuminate\Auth\Middleware\Authenticate as Middleware;
use Illuminate\Support\Arr;

class Authenticate extends Middleware
{
    protected $guards = [];
     /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @param  string[] ...$guards
     * @return mixed
     *
     * @throws \Illuminate\Auth\AuthenticationException
     */
    public function handle($request, Closure $next, ...$guards)
    {
        $this->guards = $guards;

        return parent::handle($request, $next, ...$guards);
    }
    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string|null
     */
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            if (Arr::first($this->guards) === 'admin') {
                return route('admin.login');
            }
            return route('trainee.login');
        }

    }

}
xxhby3vn

xxhby3vn3#

感谢您最近的答复Thanh Nguyen。我的自定义认证中间件是最新版本的工作

if (Arr::first($this->guards) === 'admin') {
       return route('admin.login');
  }
 return route('customer.login');

以前在Handler.php中使用未经身份验证的函数来替换父函数。

protected function unauthenticated($request, AuthenticationException $exception)
{
    $guard = Arr::get($exception->guards(), 0);
    switch ($guard) {
      case 'respondent':
      $login = 'respondents.login';
      break;
      case 'admin':
      $login = 'admin.login';
      break;
      default:
      $login = 'admin.login';
      break;
    }

    return $request->expectsJson()
                ? response()->json(['message' => $exception->getMessage()], 401)
                : redirect()->guest(route($login));
}

两者都正常工作,但最新版本的array_get在获取我们使用的保护时可能存在问题:

$guard = array_get($exception->guards(), 0);

对于任何面临此问题的用户,Laravel 7.* 及更高版本已弃用此方法

iyfjxgzm

iyfjxgzm4#

处理程序类错误-Laravel
公共函数句柄($request,闭包$next)
带有公共函数句柄($request,闭包$next,... $auth)

相关问题