情况:
在我们的系统中,从Admin中注销用户只会将它们从管理部分注销,我们希望它们从应用程序中注销(我们正在使用laore的encore管理包)。我创建了一个新的注销类,它覆盖了默认的管理注销,并运行了标准的laravel注销。这成功地将用户从系统中注销并将其返回到登录屏幕。
问题:
问题是,在第一次尝试重新登录时,用户被重定向到注销方法,然后将其返回到登录屏幕(在浏览器的网络选项卡中验证)
问题:
如何让laravel忘记此URL并像新登录一样处理,或者是否有更好的方法来处理此注销?
这是我的代码:
routes.php文件:
$router->get('auth/logout', 'AdminAuthController@logout');
AdminAuthController:
namespace App\Admin\Controllers;
use Encore\Admin\Controllers\AuthController;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
class AdminAuthController extends AuthController
{
use AuthenticatesUsers {
logout as logoutUser;
}
public function logout(Request $request) {
//runs the Encore/Admin logout function
parent::getLogout();
//runs standard logout to logout user after admin logout
$this->logoutUser($request);
//redirect to home whcih will be login page since user is logged out
return redirect('/');
}
}
父功能:
/**
* User logout.
*
* @return Redirect
*/
public function getLogout()
{
Auth::guard('admin')->logout();
session()->forget('url.intented');
return redirect(config('admin.prefix'));
}
答案 0 :(得分:0)
解决方案:
我认识到这可能不是最理想的解决方案,但它会起作用,而且它通常具有逻辑意义。
在我经过身份验证的方法中(所以登录后)我检查了预期的URL字符串,如果它包含单词logout,我会重定向到应用程序的根页面。因为从逻辑上登录,你永远不应该访问注销。 / p>
if(str_contains(redirect()->intended($this->redirectPath())->getTargetUrl(), 'logout')){
return redirect('/');
}
return redirect()->intended($this->redirectPath());
我仍然愿意改进,所以如果有人有更好的想法,请发帖!