2011-06-15 186 views
0

我正在使用基于服务器的身份验证,因此我试图在Yii中实现自定义登录系统。为了学习这个系统,我尝试创建一个虚拟身份验证类,它会自动登录一个用户。我包括在配置类,但我不知道如何登录用户英寸Yii:无登录页面处理登录

有没有办法自动登录第一次使用的应用程序(例如作为会话创建?)或有没有更好的方法来实现这一目标?

此基础上是一个自定义的验证类:

class MyAuthentication 
    extends CApplicationComponent 
    implements IUserIdentity { 

    private $_username = ''; 
    private $_authenticated = False; 
    ... 
    public function authenticate() 
    { 
     $this->_username = 'exampleUser'; 
     $this->_authenticated = True; 
     return True; 
    } 

    public function getIsAuthenticated() 
    { 
     return $this->_authenticated; 
    } 

回答

1

由于我的身份验证基于服务器端变量,因此我可以使用accessRules数组的expression功能来检查该变量是否为真。我写了一个自定义类的帮助:

class User 
{ 

    public function is_authenticated() 
    { 
    return True; 
    } 

} 

和更新,我的规则来使用表达式检查,而不是用户的检查,as described by the documentation

public function accessRules() 
{ 
    return array(
     array('allow', 
      'actions'=>array('index','view', 'new'), 
      'expression'=>'User::is_authenticated()', 
      ... 
1

好像你靠近。像这样的东西应该是你的榜样:

class UserIdentity extends CUserIdentity 
{ 
    private $_username = ''; 
    private $_authenticated = FALSE; 

    public function authenticate() 
    { 
     $this->_username = 'exampleUser'; 
     $this->_authenticated = TRUE; 
     return $this->_authenticated; 
    } 
    public function getIsAuthenticated() 
    { 
     return $this->_authenticated; 
    } 
} 
1

为控制器创建一个过滤器,并检查用户是否已通过身份验证。如果不是,则认证用户。