zetrider/botauth

通过机器人进行身份验证

dev-master 2019-06-27 13:42 UTC

This package is auto-updated.

Last update: 2024-09-28 01:29:11 UTC


README

此包允许通过机器人实现社交网络中的身份验证。主要任务是简化使用移动设备通过社交网络登录网站的用户身份验证。

以下类型的链接:

将打开移动应用程序以开始与机器人的对话。访问者无需在浏览器中重新输入用户名和密码。

可以连接以下机器人:

  • 微信朋友圈
  • Telegram
  • Facebook
  • 您的自定义提供者(以下为示例)

演示 https://laravel.zetrider.ru/

安装

  1. composer require zetrider/botauth

  2. 在 config/app.php 中连接包

    • 提供者 ZetRider\BotAuth\BotAuthServiceProvider::class,
    • 外观(别名)

    'BotAuth' => ZetRider\BotAuth\Facades\BotAuth::class,

  3. 复制配置文件

    php artisan vendor:publish --tag=botauth-config

    如有必要

    php artisan vendor:publish --tag=botauth-views

    php artisan vendor:publish --tag=botauth-migrations

  4. 在参数 link 中指定所需社交网络的链接。

  5. 在 ENV 文件中填写机器人的密钥 BOTAUTH_VKONTAKTE_API_SECRET

    BOTAUTH_VKONTAKTE_API_TOKEN

    BOTAUTH_VKONTAKTE_API_CONFIRM

    BOTAUTH_TELEGRAM_API_TOKEN

    BOTAUTH_TELEGRAM_PROXY

    BOTAUTH_FACEBOOK_API_SECRET

    BOTAUTH_FACEBOOK_API_TOKEN

    BOTAUTH_FACEBOOK_API_CONFIRM

  6. 运行迁移 php artisan migrate

  7. 在 Middleware VerifyCsrfToken 中添加排除 callback 地址的例外,默认为 botauth/callback/*'

protected $except = [
    'botauth/callback/*' // Except callback Csrf middleware
];
  1. 为您的 User 模型添加特质: use ZetRider\BotAuth\Traits\BotAuthUserTrait; 它将添加与社交网络用户登录的关系

连接机器人

微信朋友圈

  1. 打开您的社区设置或创建一个新的 https://vk.com/groups?w=groups_create
  2. 在社区设置中,打开“设置” - “API 工作设置”
  3. 创建访问密钥,选择“允许应用程序访问社区的消息”,记录密钥,需要在 .env 中指定 BOTAUTH_VKONTAKTE_API_TOKEN
  4. 在同一页面上选择 Callback API,选择“API 版本” 5.95,在“地址”字段中指定您的网站的 callback 地址,默认示例 https://DOMAIN/botauth/callback/vkontakte
  5. 下面指定服务器应该返回到 .env 的字符串 BOTAUTH_VKONTAKTE_API_CONFIRM
  6. 在“密钥”字段中创建任何秘密密钥,在 .env 中指定 BOTAUTH_VKONTAKTE_API_SECRET
  7. 在 .env 中填写所有密钥后,点击“确认”按钮
  8. 在同一页面上打开“事件类型”标签页,需要选择“传入消息”
  9. 打开社区设置,选择“消息”,启用“社区消息”
  10. 打开社区设置,选择“消息” - “机器人设置”,启用“机器人功能”

机器人已准备好工作。

直接链接到与机器人的对话示例 https://vk.me/zetcode

Telegram

  1. 通过 @BotFather 创建您的机器人
  2. 记住密钥,在 .env 中指定 BOTAUTH_TELEGRAM_API_TOKEN
  3. 通过 https://api.telegram.org/botYOUR_TOKEN/setWebhook?url=https://DOMAIN/botauth/callback/telegram 添加 Webhook,其中 YOUR_TOKEN 是您的令牌。
  4. 如有必要,在 .env 中指定代理 BOTAUTH_TELEGRAM_PROXY,例如 socks5h://127.0.0.1:1080

机器人已准备好工作。

直接链接到与机器人的对话示例 https://t.me/BotAuthBot

Facebook

  1. 您应该创建一个页面,如果没有,请添加 https://#/pages/creation/?ref_type=universal_creation_hub
  2. 添加新的应用程序 https://developers.facebook.com/apps/
  3. 在应用程序设置中,选择“基本”,将“应用程序密钥”复制到.env中的BOTAUTH_FACEBOOK_API_SECRET
  4. 在应用程序设置中,需要添加“消息传递”产品
  5. 在“消息传递”产品设置中,创建访问令牌,并在.env中指定其值 BOTAUTH_FACEBOOK_API_TOKEN
  6. 在“消息传递”产品设置中,创建Web钩子,在URL回调中指定 https://DOMAIN/botauth/callback/facebook,在“确认标记”字段中指定任意文本,保存在.env中 BOTAUTH_FACEBOOK_API_CONFIRM,在“订阅字段”选项中选择“messages”,点击“确认”
  7. 确认服务器后,在Web钩子设置中选择页面,点击“订阅”,选择需要的页面
  8. 在“检查消息传递应用程序”窗口中,与“pages_messaging”项目旁边的点击“添加到申请”
  9. 机器人已经准备就绪,但目前仅供管理员使用。确认应用程序后,它将对所有访客开放。将应用程序提交审核。

对话机器人直接链接的示例 https://m.me/zetridercode

重要

  1. 网站必须通过https运行
  2. Facebook机器人返回的PSID与用户的公共ID不匹配
  3. 默认情况下,机器人控制器与\App\User模型一起工作。如果您的情况不同,只需根据存储库中的示例创建自己的控制器和模型。

如何添加自己的提供者

创建一个继承自抽象类ZetRider\BotAuth\AbstractProvider的类

示例 example/ExampleProvider.php

在服务提供者中添加提供者,例如AppServiceProvider中的boot方法

// Register example proider
BotAuth::extend('example', function() {
    return new \Path\To\Your\Class\ExampleProvider();
});

提供者将处理回调地址为/botauth/callback/example的请求

事件

处理机器人新消息成功的事件

// Catch bot callback
\Event::listen(\ZetRider\BotAuth\Events\MessageNewEvent::class, function($event)
{
    $provider = $event->provider; // ZetRider\BotAuth\AbstractProvider

    $slug = $provider->getProviderSlug();
    $data = $provider->getCallbackResponse();
    $user = $provider->getUser();
    $text = $provider->getText();

    // You can send a message
    // $provider->sendMessage(__('Back to web site'));
});