【问题标题】:How to access existing user email in devise in ruby on rails如何在 ruby​​ on rails 中访问现有用户电子邮件
【发布时间】:2019-05-27 05:46:46
【问题描述】:

我正在使用带有 Devise gem 的 ruby​​ on rails 来验证用户身份。每次新用户使用他/她的电子邮件地址签名时,我都可以看到设计正在为该用户分配新的用户 ID 并在那里注册电子邮件地址。现在我想为所有第一次使用的用户显示一条欢迎消息(我不希望在他们第二次或第三次登录时出现此消息)。 为了显示消息,我想检查 current_user.email 与用户表中所有注册的电子邮件(这里的逻辑是:如果用户已经存在于用户表中,那么我可以安全地假设用户已经访问过该网站,所以我阻止显示欢迎)。我不确定如何访问表中的所有电子邮件 ID?还有在哪里做这个检查。我希望此欢迎消息成为用户在登录成功后立即看到的第一件事。谁能帮忙。

我尝试在会话控制器中使用“资源”resource_name”,但没有任何效果。不确定这些是否与远程相关。

    # POST /resource/sign_in
    def create       
      self.resource = warden.authenticate!(auth_options)
      $sign = sign_in_count
      set_flash_message!(:notice, :signed_in)
      sign_in(resource_name, resource)
      yield resource if block_given?
      respond_with resource, location: after_sign_in_path_for(resource)      
    end

我正在尝试将登录用户的 sign_in_count 分配给一个名为 $sign 的全局变量,以便我可以使用它的值来检查用户是否第一次登录。

【问题讨论】:

  • 新用户记录在注册时创建,而不是在首次登录时创建。如果用户在注册后自动登录,您可以自定义 Registrations#create,否则自定义 Sessions#create。在后一种情况下,请按照答案中的建议检查sign_in_count
  • 当我在 sessionController # create 中使用“sign_in_count”时,我收到错误消息:未定义的局部变量或方法 `sign_in_count' for #<:sessionscontroller:0x00007f21e4222380> 你的意思是?退出
  • 你如何使用它?向问题添加代码
  • @Vasilisa 我已按照您的要求添加了代码。请告诉我我哪里出错了。

标签: ruby-on-rails devise


【解决方案1】:

要在用户首次登录您的应用时显示消息,为什么不使用 sign_in_count ?

这可以避免您获取数据库中的所有电子邮件地址来检查它是否已经存在

【讨论】:

    【解决方案2】:

    sign_in_countusers 表中的一列。应该是:

    # sessions_controller.rb
    def create
      super # just call predefined action 
      set_flash_message!(:notice, :signed_in) if resource.sign_in_count == 1
    end
    

    【讨论】:

    • @Pal 很乐意为您提供帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 2013-06-08
    • 1970-01-01
    • 2011-01-24
    • 2015-07-31
    • 2011-10-08
    • 1970-01-01
    相关资源
    最近更新 更多