8

我有一个用户类,它由两种类型的用户组成,并希望允许不同的用户访问不同的页面。

我创建了一个过滤器,如下所示

Route::filter('isExpert', function()
{
    $userIsExpert = 0;
    $userIsLoggedIn = Auth::check();
    if ($userIsLoggedIn && Auth::user()->role == 'expert') {
    $userIsExpert = 1;
    }

    Log::info('Logged in: ' . $userIsLoggedIn . ' && Expert: ' . $userIsExpert);
    if ($userIsExpert == 0)
    {
        Log::info('should be logging out now.');
        Auth::logout();
        return Auth::basic();
    }
});

像这样路由

Route::get('/winners', array('before' => 'isExpert', function()
{
    $winners = DB::select('select * from winners');
    return View::make('winners.index')->with('winners',$winners);
}));

想法是这样的:如果它不是专家,它将注销并重定向到登录页面。如果是,它将继续。但是, Auth::logout(); 永远不会注销用户。

问题

为什么 Auth::logout() 不工作?我试过把它放在应用程序的任何地方都无济于事。

干杯

4

4 回答 4

9

我有同样的问题,我真的无法注销当前用户......答案很简单:Laravel 不支持 Auth::basic() 的 logout()。

有办法修复它,但不是很干净;https://www.google.nl/search?q=logout+basic

于 2013-08-19T09:55:27.173 回答
4

这不是 Laravel 的限制,HTTP 基本授权并非旨在处理注销。客户端将保持登录状态,直到浏览器关闭。

HTTP 基本授权确实不应该在任何公共生产环境中使用。以下是一些原因:

  • 无法在登录表单上为用户提供“记住我”选项。
  • 密码管理器不支持或缺乏对 HTTP Basic Auth 的支持,因为它不是呈现 HTML 而是原生弹出窗口。
  • 糟糕的用户体验。将适当的登录表单放在一起非常值得花一点时间。

我能想到的唯一有效的案例是保护像 dev.example.com 这样的公共开发子域,但也有更好的方法来解决这个问题。

于 2014-03-29T07:01:40.960 回答
3

我找到的最简单的方法是在注销路由上重定向到无效的用户名/密码。例子:

Route::get('admin/logout', function() {
    return Redirect::to(preg_replace("/:\/\//", "://log-me-out:fake-pwd@", url('admin/logout')));
});
于 2013-09-05T21:22:48.933 回答
1

如果你在 User.php 中实现了这些方法

/**
 * Get the e-mail address where password reminders are sent.
 *
 * @return string
 */
public function getReminderEmail()
{
    return $this->email;
}

public function getRememberToken()
{
    return $this->remember_token;
}

public function setRememberToken($value)
{
    $this->remember_token = $value;
}
    public function getRememberTokenName()
{
    return 'remember_token';
}

在mysql数据库中的“users”表中添加名为“remember_token”的新列,然后注销,最终成功解决。要替换您的表,请使用此 SQL 命令:

ALTER TABLE users ADD remember_token TEXT;

然后按“开始”按钮。

于 2014-04-16T13:43:36.713 回答