mvo/me-like

让用户喜欢事物,通过电子邮件确认他们的喜好并跟踪计数。

维护者

详细信息

github.com/m-vo/me-like

源代码

问题

安装: 554

依赖: 1

建议者: 0

安全: 0

星标: 0

关注者: 3

分支: 0

开放问题: 6

类型:symfony-bundle

v0.1.1 2020-04-24 08:59 UTC

README

Demo

它做什么?

此包提供了一个小部件,用户可以点击来喜欢事物(由API支持)。

喜欢需要确认才能计数 - 这通过要求电子邮件地址并发送带有确认链接的电子邮件来实现。这同时也是一个约束:每个用户(电子邮件)只能喜欢(每个端点)一次。

可以有多个端点/域名(= 喜欢的事物),这些由一个唯一的字符串标识。例如,可以是单个一个(idea),或者是固定或动态列表(project.1project.2,…) - 系统实际上并不关心。当列出/添加/确认喜欢时,系统会询问您的代码是否给定的端点是有效的。

js小部件通过API端点与服务器系统通信。它还充当确认喜欢的代理。为了使此功能正常工作,我们定义了一个包含'确认令牌'的特定URL片段,该片段供小部件监听(对于用户令牌也适用;见下文)。

安全性与隐私

  • 电子邮件地址本身从未存储 - 只存储它们的单向散列。此外:散列对于每个端点和系统都是唯一的。
  • API 不允许 检查某个电子邮件地址是否已经'喜欢'了端点。然而,小部件(客户端)在请求新的喜欢时获取一个令牌并将其存储在localstorage中。此令牌允许它查询有关用户喜欢的信息(因此可以提供更好的UI)。
  • 用户令牌附加到'确认URL'中,允许小部件读取它并刷新本地版本。

服务器上存储的内容

  • 数据库中哈希电子邮件的表(参见Like实体)

客户端存储的内容

  • 用户令牌(localstorage

设置

  1. 需要包并注册它。

    composer require mvo/me-like
  2. 在您的twig模板中将小部件渲染到所需的端点

    {{ render(controller('mvo.me_like.widget', { 'endpoint': 'my-endpoint' })) }}
  3. 添加端点处理程序(实现Mvo\MeLike\Endpoint\EndpointInterface),对于您想要允许的端点返回VALID。您还可以向端点添加随机数据上下文,这些上下文将在通知模板中可用。

     class MyEndpoint implements EndpointValidatorInterface
     {
         public function handle(string $domain, ?int $id): ?bool
         {
             return 'my-endpoint' === $domain ? 
                 EndpointValidatorInterface::VALID : 
                 EndpointValidatorInterface::UNKOWN;
         }
    
        public function addContext(string $domain, ?int $id): ?array
        {
             return null;
        }
     }   

    如果您的端点名称的形式为<domain>.<id>,则各个部分将传递给您的处理程序。

    请注意,只有当handle()对于此端点返回VALID时,处理程序才会被询问为端点添加上下文。您不需要在addContext()内部重新检查有效性。

  4. 如果您不使用自动配置,请使用mvo_me_like.endpoint标记处理程序。

  5. 请确保加载js小部件和最小样式。该包包含一个编译版本(like_widget.jslike_widget.css),它自动初始化小部件并有一些有偏见的样式。您可以自由构建自己的版本(参见/layout下的源代码)。

配置

  1. 系统通过symfony mailer发送电子邮件。配置以下模板和配置键以适应您的需求

    • 通知模板: @MvoMeLike\Email\confirm_like.html.twig
    • Mailer配置
      mvo_me_like:
        notification:
            email_from: 'mail@example.com'
  2. 根据您的需求调整翻译。您也可以通过这种方式修改电子邮件主题。如果需要上下文相关参数,请通过键email_subject在端点处理程序中传递。

  3. 您还可以配置附加到URL的令牌名称(用户令牌 + 确认令牌)(例如,如果您有一些具有相同名称的锚点)

    mvo_me_like:
      user_token: 'tok_u'
      confirm_token: 'tok_c'

    这将导致一个类似这样的 '确认 URL':https://example.com/some/site#tok_u=&tok_c=

    所有令牌的长度都是64个字符。