
[英]Changing the Laravel redirect location after registration not working - Laravel 5.6
[英]Laravel 5.6 Changing redirect with unauth with guards
我有一个管理员和 Laravel 5.6 附带的常规网络守卫。 正如我所看到的,Laravel 5.5 up 已经更改了位于 \\app\\Exceptions\\Exceptions.php 中的 Exceptions.php 文件,以便函数:
/**
* 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');
}
}
不再存在。 并且为了让
$this->middleware('auth:admin');
要工作并重定向到管理员登录名而不是“/登录”,我需要将此方法放在此异常文件中。 我在这里读到你可以复制它并使用它,因为它所做的唯一一件事就是覆盖,而 Laravel 出于某种原因删除了它。 但关键是,为了让我的 switch 语句使方法看起来像这样:
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));
}
但是当尝试加载以查看它是否在转到 /admin/login 时重定向到管理员登录时,它说
未定义变量:登录
问题是什么? 我猜它必须与 $guard 做些什么,但我不确定。 任何帮助是极大的赞赏!
好吧,上面代码中的问题很明显。
在
return redirect()->guest(route($login));
您使用$login
变量,它可能没有定义,因为您只为条件定义它:
if ($request->expectsJson()) {
所以为了让它工作,你可能应该像这样结束 if 条件:
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));
如果您使用的是较新版本的 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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.