我已在插件的启动事件中为“ rainlab.user.logout”注册了一个侦听器。
public function boot()
{
Event::listen('rainlab.user.logout', function ($controller) {
return Redirect::to('https://www.google.com');
});
}
它什么都不做。我已使用
确认流程已到达此块header("Location: https://www.google.com");
exit;
代替return语句,该语句在不带重定向的情况下显示一个警告框,提示“错误” 。
答案 0 :(得分:0)
您可以使用Logout Ajax链接的data属性重定向到所需的任何位置。请检查以下示例。 [要使其正常工作,您需要将会话组件添加到页面中]
检查更多信息:https://octobercms.com/plugin/rainlab-user#documentation
<a data-request="onLogout"
data-request-data="redirect: 'https://www.google.com'"
>
Sign out
</a>
如果您仍想使用事件重定向用户,则可以使用以下代码。注意:这类骇人听闻的方法
not recommended but yes it works
。
Event::listen('rainlab.user.logout', function ($controller) {
$_POST['redirect'] = 'https://www.google.com';
});
为什么您的方法无效 [仅用于理解]
因为在事件处理程序中他们没有捕获您从事件返回的任何数据,所以您是
returning Redirect
,但是在处理程序中他们没有捕获或接收到该数据,因此此事件rainlab.user.logout
仅被触发并让您仅访问$user
对象数据。因此您的return语句对此没有影响。
内容:plugins / rainlab / user / components / Session.php
public function onLogout()
{
$user = Auth::getUser();
Auth::logout();
if ($user) {
Event::fire('rainlab.user.logout', [$user]);
// ^ see, nothing is here which can accept your return redirect.
}
$url = post('redirect', Request::fullUrl());
Flash::success(Lang::get('rainlab.user::lang.session.logout'));
return Redirect::to($url);
}
如有疑问,请发表评论。