Laravel 5.4:当用户登录时将用户重定向到他的帐户并尝试转到登录页面
Laravel 5.4: redirect user to his account when user is login and try to go to login page
我有 tree Auth guard(客户、供应商、管理员),这里是 RedirectIfAuthenticated.php
看起来像
public function handle( $request, Closure $next, $guard = null ) {
switch ( $guard ) {
case 'supplier':
{
if ( Auth::guard( $guard )->check() ) {
return redirect()->route( 'supplier-dashboard' );
}
break;
}
case 'admin':
{
if ( Auth::guard( $guard )->check() ) {
return redirect()->route( 'admin-dashboard' );
}
break;
}
default :
{
if ( Auth::guard( $guard )->check() ) {
return redirect( '/my-account' );
}
}
}
return $next( $request );
}
当我以供应商或管理员身份登录并尝试转到登录页面时,它会将我带到右侧 route
但是对于客户来说,它把我带到了登录页面,这是错误的,因为我定义了默认情况下重定向到 /my-account
default :
{
if ( Auth::guard( $guard )->check() ) {
return redirect( '/my-account' );
}
}
我在这里缺少什么?
Solution
正如@BilalAhmed 建议我调试了 ( Auth::guard( $guard )->check() )
的 return 结果是 false
然后我尝试 ( Auth::guard( 'web' )->check() )
这对我来说很好。
Laravel(身份验证中间件)有两种类型的 auth guard,web
和 api
。对于自定义,您必须在身份验证模型中定义 protected $guard = 'customer';
默认情况下 laravel 使用 web
就像 Auth::guard('web')->user()
。它类似于 Auth::user()
。你也可以在 config/auth.php
文件
中检查默认守卫
执行此行时 if ( Auth::guard( $guard )->check() )
这意味着 Auth::guard( 'customer' )->check()
但是 auth.php 文件中没有定义客户保护
如果您想创建自定义守卫,请阅读 this articles
我有 tree Auth guard(客户、供应商、管理员),这里是 RedirectIfAuthenticated.php
看起来像
public function handle( $request, Closure $next, $guard = null ) {
switch ( $guard ) {
case 'supplier':
{
if ( Auth::guard( $guard )->check() ) {
return redirect()->route( 'supplier-dashboard' );
}
break;
}
case 'admin':
{
if ( Auth::guard( $guard )->check() ) {
return redirect()->route( 'admin-dashboard' );
}
break;
}
default :
{
if ( Auth::guard( $guard )->check() ) {
return redirect( '/my-account' );
}
}
}
return $next( $request );
}
当我以供应商或管理员身份登录并尝试转到登录页面时,它会将我带到右侧 route
但是对于客户来说,它把我带到了登录页面,这是错误的,因为我定义了默认情况下重定向到 /my-account
default :
{
if ( Auth::guard( $guard )->check() ) {
return redirect( '/my-account' );
}
}
我在这里缺少什么?
Solution
正如@BilalAhmed 建议我调试了 ( Auth::guard( $guard )->check() )
的 return 结果是 false
然后我尝试 ( Auth::guard( 'web' )->check() )
这对我来说很好。
Laravel(身份验证中间件)有两种类型的 auth guard,web
和 api
。对于自定义,您必须在身份验证模型中定义 protected $guard = 'customer';
默认情况下 laravel 使用 web
就像 Auth::guard('web')->user()
。它类似于 Auth::user()
。你也可以在 config/auth.php
文件
执行此行时 if ( Auth::guard( $guard )->check() )
这意味着 Auth::guard( 'customer' )->check()
但是 auth.php 文件中没有定义客户保护
如果您想创建自定义守卫,请阅读 this articles