Laravel:Sentry不会检查用户是否已登录

时间:2013-06-05 03:26:44

标签: php laravel authentication cartalyst-sentry

在使用Sentry软件包时,我创建了LoginController控制器,以检查用户是否登录了重定向的位置,以防万一。我的目的是将所有受限制的页面扩展到此类,以使我的代码更有效。但为什么它不起作用?

登录控制器:

// Extends the BaseController
class LoginController extends BaseController {

    public function __construct() {
        if(!Sentry::check()) return Redirect::to('login');
    }

}

我的实际控制者:

class MainController extends LoginController {

    public function getIndex() {

        if(Sentry::getUser()->hasAccess('view dashboard')) {
            return View::make('admin.index');
        } else {
            return 'You have no access!';
        }
    }

}

我总是得到的错误:

Call to a member function hasAccess() on a non-object

什么有用:如果我直接在if(!Sentry::check()) return Redirect::to('login');而不是getIndex()添加__construct,则重定向工作正常。为什么呢?

4 个答案:

答案 0 :(得分:1)

注意拼写错误! __contruct缺少s。

答案 1 :(得分:0)

我看到它的方式是__construct()方法只会在初始化时被调用。在你的情况下,你正在扩展它而不是初始化它。如果你做这样的事情它可能会有效。

class MainController extends LoginController {
public function __construct()

{

   return parent::__construct();
}

public function getIndex() {

        if(Sentry::getUser()->hasAccess('view dashboard')) {
            return View::make('admin.index');
        } else {
            return 'You have no access!';
        }
    }

希望这有帮助。

答案 2 :(得分:0)

我认为问题也是

public function __construct()
{

   parent::__construct();
}

如果要执行它,您将调用父类的构造

答案 3 :(得分:0)

也许是因为你没有登录?

您可能需要this

之类的内容
try
{
    // Get the current active/logged in user
    $user = Sentry::getUser();
}
catch (Cartalyst\Sentry\Users\UserNotFoundException $e)
{
    // User wasn't found, should only happen if the user was deleted
    // when they were already logged in or had a "remember me" cookie set
    // and they were deleted.
}