如何检测Rails / Devise current_user是否为来宾用户

时间:2015-07-30 21:53:30

标签: ruby-on-rails devise

我有一个Rails应用程序运行"真正"用户和"客人"用户通过设计(https://github.com/plataformatec/devise/wiki/How-To:-Create-a-guest-user)。

大多数时候,他们可以无法区分地使用,但偶尔我希望能够告诉他们真实的"从" guest"登录用户尚未登录或创建帐户的用户。

有没有标准的方法来做到这一点? (一定有,对吗?)

以下是我在=> #<User:0x007fb011620c78 id: 30, email: "guest_143829190430@example.com", encrypted_password: "$2a$10$MJr8M3JA6/wYCoOz0oBTseoA3zVnLUceY7BeJLRnLgeXfKNMW/k/S", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: Thu, 30 Jul 2015 16:31:44 CDT -05:00, last_sign_in_at: Thu, 30 Jul 2015 16:31:44 CDT -05:00, current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", created_at: Thu, 30 Jul 2015 16:31:44 CDT -05:00, updated_at: Thu, 30 Jul 2015 16:31:44 CDT -05:00, first_name: "guest", last_name: "guest", 中看到的一个示例:

first_name

我可以查看last_name / email / session[:guest_user_id],但这感觉很脆弱,我可以在会话中寻找.is_guest?,这似乎也许是要走的路,但感觉应该有一个内置的def is_guest? current_user.id == session[:guest_user_id] if current_user && session[:guest_user_id] end 或其他东西,我宁愿使用它而不是写我自己的。

(我的谷歌和他们的代码库的探索还没有发现任何东西......一旦我可以撤回他们的回购和grep,可能会有更多......)

全部谢谢!

迄今为止,我所做的最好是:

/*
 * Factory bean that creates the com.mongodb.Mongo instance
 */
public @Bean MongoClientFactoryBean mongo() {
    MongoClientFactoryBean mongo = new MongoClientFactoryBean();
    mongo.setHost(host);
    return mongo;
}

1 个答案:

答案 0 :(得分:2)

在不深入研究所有可用代码的情况下,我建议current_or_guest_user方法的开头描述所需的检查。我将按照以下方式创建一个方法:

def is_guest_user?
  # Someone is logged in AND (we have a guest id AND that id matches the current user)
  current_user && (session[:guest_user_id] && session[:guest_user_id] == current_user.id)
end

我会将此添加到User模型中。基于current_or_guest_user方法,我不希望您发现其他任何内置内容(当然,他们会在该方法中使用它)。