muffin / hyperlinkauth

CakePHP 3 的无密码认证

安装: 23

依赖关系: 0

建议: 0

安全性: 0

星标: 9

关注者: 5

分支: 1

类型:cakephp-plugin

dev-master / 1.0.x-dev 2016-03-25 20:52 UTC

This package is auto-updated.

Last update: 2024-08-28 01:11:30 UTC


README

Build Status Coverage Total Downloads License

CakePHP 3 的无密码认证。

在登录页面提交用户电子邮件后发送登录链接。

  1. 用户提交电子邮件
  2. 系统在验证电子邮件后发送链接
  3. 用户点击链接
  4. 系统在验证令牌后对用户进行身份验证

安装

使用 Composer

composer require muffin/hyperlinkauth:1.0.x-dev

然后,您需要加载插件。您可以使用以下 shell 命令

bin/cake plugin load Muffin/HyperlinkAuth

或者通过手动将以下语句添加到您的应用程序的 config/bootstrap.php

Plugin::load('Muffin/HyperlinkAuth');

使用方法

// src/Controller/AppController.php
public function initialize()
{
    $this->loadComponent('Auth', ['authenticate' => ['Muffin/HyperlinkAuth.Hyperlink']]);
}

然后创建您的登录操作

// src/Controller/UsersController.php
public function login()
{
    if (!$this->request->is('post') && !$this->request->is('token')) {
        return;
    }

    $user = $this->Auth->identify();

    if ($user === true) {
        $this->Flash->success(__('A one-time login URL has been emailed to you'));
        return;
    }

    if ($user) {
        $this->Auth->setUser($user);
        return $this->redirect($this->Auth->redirectUrl());
    }

    $this->Flash->error(__('Email is incorrect'), [
        'key' => 'auth'
    ]);
}

如果您注意到,这与 默认操作方式 非常相似,区别在于它检查请求的 token 类型并处理 $user === true(当发送电子邮件时返回)。

对于发送电子邮件,您可以选择不同的方法。这里展示的最简单的方法(在此处演示),使用 UsersController 作为监听 Auth.afterIdentify 事件的监听对象。另一种方法是使用邮件发送器。

代码

// src/Controller/UsersController.php
public function implementedEvents()
{
    return parent::implementedEvents() + [
        'Auth.afterIdentify' => 'afterIdentify',
    ];
}

public function afterIdentify(Event $event, $result, HyperlinkAuthenticate $auth)
{
    if (!$this->request->is('post')) {
        return;
    }

    $token = $auth->token($result);

    $url = Router::url($this->Auth->config('loginAction') + ['?' => compact('token')], true);
    Email::deliver($result['email'], 'Login link', $url, ['from' => 'no-reply@' . env('HTTP_HOST')]);

    return true;
}

补丁和功能

  • 分支
  • 修改,修复
  • 测试 - 这很重要,所以它不会无意中损坏
  • 提交 - 不要修改许可证,todo,版本等。(如果您确实更改了任何内容,请将它们提升到自己的提交中,这样我在拉取时可以忽略它们)
  • 提交请求 - 主题分支的额外加分项

为了确保您的 PR 被考虑,您必须遵循 CakePHP 编码标准

缺陷和反馈

http://github.com/usemuffin/hyperlinkauth/issues

许可证

版权所有 (c) 2016, Use Muffin,并许可于 MIT 许可证