krydos/persona-yii

Mozilla Persona (BrowserID) 扩展,适用于 Yii 框架

安装次数: 9

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 3

分支: 0

语言:CSS

dev-master 2014-01-26 17:11 UTC

This package is not auto-updated.

Last update: 2024-09-24 03:08:05 UTC


README

安装

Composer

将以下内容添加到您的 composer 文件中 require 部分

krydos/persona-yii

手动安装

  • 进入您的扩展文件夹
  • 在扩展文件夹中克隆此仓库
  • 将以下行添加到 config 文件中的 import 部分

'ext.persona.Persona''ext.persona.PersonaUserIdentity'

您的 import 部分 应该看起来像这样

    'import' => array(
        '...',
        'ext.persona.Persona',
        'ext.persona.PersonaUserIdentity',
        '...',
    ),

安装完成。太好了! :)

使用方法

要在视图中添加 Persona 登录按钮,可以像这样调用小部件

       <?php $this->widget('ext.persona.PersonaWidget'); ?>

PersonaWidget 可以接受多个参数,如

  • button_text - Persona 按钮上的文本
  • button_style - Persona 按钮的样式(橙色、深色或未设置时的默认样式)
  • login_url - 登录系统的 URL 地址
  • logout_url - 从系统注销的 URL 地址

PersonaWidget 是默认的 Yii 小部件,因此您可以像这样设置所有这些参数

    $this->widget('ext.persona.PersonaWidget', array(
     'button_text' => 'Login button text',
     'button_style' => 'dark',
     'login_url' => $this->createUrl('site/login'),
     'logout_url' => $this->createUrl('site/logout'),
    ));

在您的 登录动作 中添加以下行

    $identity = new PersonaUserIdentity('User'); 
    if($identity->authenticate()) {
        Yii::app()->user->login($identity);
        echo json_encode(array('url'=>Yii::app()->user->returnUrl));
        Yii::app()->end();
    }

让我们看看这里发生了什么。

    $identity = new PersonaUserIdentity();

这行代码创建了一个 PersonaUserIdentity 对象。这类似于默认的 Yii UserIdentity,但您可以传递一些参数进去。

  • 第一个参数是模型名称。(默认为 User
  • 第二个参数是电子邮件字段名称(默认为 email

下一行是

    if($identity->authenticate()) {

这也类似于默认的 UserIdentity。这里您只需通过电子邮件检查用户是否存在。

    Yii::app()->user->login($identity);

这也是 UserIdentity 的默认行。这行将登录信息写入 SESSION

        echo json_encode(array('url'=>Yii::app()->user->returnUrl));
        Yii::app()->end();

这是一条 非常重要的 行。登录成功后,您可能想要将用户重定向到某个 URL 或上面的上一个用户 URL。您应该创建一个包含带有 'url' 字段的 JSON 响应,该字段包含重定向的 URL。然后在此响应之后,您应该结束 Yii 应用程序。

因为 Persona 通过 Ajax 工作,您可能想要检查动作中的 persona 请求。您可以使用以下方法进行检查

    if(Persona::isPersonaRequest()) {/* continue persona auth */ }

就是这样。随时发送 Pull Request :)