我有一个管理员和Laravel 5.6附带的常规网络守卫。正如我所看到的,Laravel 5.5 up已经更改了位于\ app \ Exceptions \ Exceptions.php中的Exceptions.php文件,以便该函数:
urlencode
不再存在。而且为了
$这 - >中间件(' AUTH:管理员&#39);
工作并重定向到管理员登录,而不是只是" / login"我需要此方法在此异常文件中。我在这里读到你可以复制它并使用它作为唯一的事情是覆盖和Laravel因某种原因删除它。但到了这一点,为了让我创建我的switch语句,使该方法看起来像这样:
/**
* Convert an authentication exception into an unauthenticated response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Auth\AuthenticationException $exception
* @return \Illuminate\Http\Response
*/
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
return redirect()->guest('/login');
}
}
但是当试图加载以查看它是否在转到/ admin / login时重定向到管理员登录时,它说
未定义的变量:login
问题是什么?我猜它必须对$ guard做点什么,但我不确定。非常感谢任何帮助!
答案 0 :(得分:0)
嗯,上面代码中的问题很明显。
在
return redirect()->guest(route($login));
您使用$login
变量并且可能未定义,因为您只为条件定义它:
if ($request->expectsJson()) {
所以为了使它起作用,你应该结束如果条件如此:
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));
当然上面的代码实际上太长了,它可能只是:
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
$login = array_get($exception->guards(), 0) == 'admin' ? 'admin-login' : 'login'
return redirect()->guest(route($login));
答案 1 :(得分:0)
如果您使用的是laravel(7.x)的更高版本,由于许多弃用,您可能会遇到一些错误,例如;
Laravel已经删除了位于App\Exceptions\Exceptions.php
中的Exceptions.php文件。
不推荐使用array_get($exception->guards(), 0)
方法。
为使此工作正常进行,请将以下代码复制并粘贴到App\Exceptions\Handler.php
文件的底部;
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
// Checks if the guard is 'admin', 'superuser' else it returns the default
$guard = Arr::get($exception->guards(), 0);
switch ($guard) {
case 'admin':
$login = 'admin.login';
break;
case 'superuser':
$login = 'super.login';
break;
default:
$login = 'login';
break;
}
return redirect()->guest(route($login));
}
此外,请不要忘记在Handler.php文件的顶部包含名称空间以及这些特定的导入,以使其正常工作。
namespace App\Exceptions;
use Illuminate\Support\Arr;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;