使用Rails + Devise在用户注册/登录时执行JS代码

3
我正在查看Kissmetrics(分析应用程序)JS API文档,他们有一个“identify”方法,可以让您告诉Kissmetrics有关用户的信息。以下是他们的文档说明:
我们建议在以下两种情况下调用identify: - 当用户成功注册时 - 当用户通过cookie或登录页面成功登录时
那么,如何最好地实现呢?我该如何检测用户何时刚刚注册或登录?
1个回答

8

让我们将问题分为两部分:注册和登录。

您可以通过在User模型中添加after_create钩子来检测新用户何时在您的应用程序中注册。例如:

class User < ActiveRecord::Base
  after_create :register_hook

  def register_hook
    # your code here
  end
end

检测用户登录有点棘手。当用户登录时,Devise会修改用户的user.current_sign_in_at属性,因此您可以在用户模型中添加一个before_save钩子,并检查current_sign_in_at属性是否已更改。大概像这样:

class User < ActiveRecord::Base
  before_save :login_hook, :if => current_sign_in_at_changed?

  def login_hook
    # your code here
  end
end

一旦您具有正确的回调函数来检测登录/注册,则可以使用信息创建Cookie并从JavaScript中读取它,或者为User模型编写帮助程序方法,并在布局中编写以下内容:

<% if current_user.just_signed_in %>
  <script type="text/javascript">
    // Your sign in stats code here
  </script>
<% end %>

<% if current_user.just_signed_up %>
  <script type="text/javascript">
    // Your sign up stats code here
  </script>
<% end %>

按照这种方式,完整的模型将是:
class User < ActiveRecord::Base
  after_create :register_hook
  before_save :login_hook, :if => current_sign_in_at_changed?

  attr_accessor :just_singed_up, :just_signed_in

  def register_hook
    @just_signed_up = true
  end

  def login_hook
    @just_signed_in = true
  end
end

这个不起作用(我只是尝试使用注册部分)。您是否知道如何在当前版本中使其工作? - Brandon
属性@just_signed_in未存储在数据库中。如果用户在注册后被重定向,则此变量将不会设置。 - Justin Tanner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接