我将Devise设置为使用用户名而不是电子邮件地址登录,因为我们的大量用户与其配偶共享相同的电子邮件地址。这是我们服务的独特市场。但是每个配偶都需要单独的账户来记录性格仪器的结果。数据库不再需要唯一的电子邮件地址,因此它将接受两个帐户的相同电子邮件地址。但是,Devise仍然要求每个帐户都有一个唯一的电子邮件地址。是否有我可以用来更改此设置的设置或解决方法? 最佳答案 =用户模型defemail_required?falseenddefemail_changed?falseend#ForActiveRecord5.1+defwill
我正在寻求使我的Rails测试更快。我只有520个测试,但它们在bash中运行需要62秒,在Rubymine中运行需要82秒。作为典型Controller测试的示例,我使用此代码以@user身份登录并在CommentsController中为我的RSpecController测试创建基本的@comment:before(:each)do@user=Factory.create(:user)sign_in@user@comment=Factory.create(:comment)end您可能会意识到...这很慢。它构建了一个@user,但也为该用户构建了关联。@comment也是如此。所
在设计文档中,他们提供了有关在测试Controller时如何访问current_user的提示:https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4-%28and-RSpec%29但是,在进行功能测试时呢?我正在尝试测试我的一个Controller的创建方法,并且在该Controller中使用了current_user变量。问题是devise中建议的宏使用了@request变量,并且对于功能规范来说它是nil。什么是解决方法?编辑:这是我目前的规范:feature
我正在使用Rails+Devise+OmniAuth+GoogleOAuth2。我的用户模型(user.rb)包含:devise:registerable,:omniauthable,:omniauth_providers=>[:google_oauth2]我的routes.rb看起来像:Rails.application.routes.drawdodevise_for:users,controllers:{omniauth_callbacks:'omniauth_callbacks'}devise_scope:userdoget'sign_in',:to=>'devise/sessi
我有一个具有基本Devise身份验证的应用程序。登录后,我想查找用户帐户(用户belongs_to帐户,帐户has_many用户),并将其存储在session中,以便它像@current_user一样可用。rails将session存储成这样的方式是什么?是否有一个钩子(Hook)可以与Devise一起使用,以便在成功登录后执行代码? 最佳答案 实际上,在Devise中组合使用Omniauth和数据库登录模块的情况下,接受的答案无法正常工作。在Devise中每次成功登录操作后执行的nativeHook(忽略用户身份验证channel
我正在使用Devise我的Rails项目中的身份验证gem,我想更改它在flash警报中使用的key。(设计使用:notice和:alertflash键,但我想将它们更改为:success和:error以便我可以使用Bootstrap显示漂亮的绿色/红色框。)所以我希望能够以某种方式覆盖DeviseController中的set_flash_message方法.这是新方法:defset_flash_message(key,kind,options={})ifkey=='alert'key='error'elsifkey=='notice'key='success'endmessage=
似乎当用户通过标准DeviseController注销时,Devise会销毁整个session存储,而不仅仅是它自己的数据。有什么办法可以避免这种行为?我还有其他不相关的数据应该保留。session[:my_var]="123"通过设计注销...putssession[:my_var]#=>nil 最佳答案 在devise的最新版本中,不需要覆盖sessionController,相反你可以使用:config.sign_out_all_scopes=false在devise.rb文件中获得所需的行为。
我正在使用Rails2.3和Devise来处理用户注册/身份验证。我需要在用户注册帐户后立即将用户重定向到外部第3方网站。一直在查看代码和在线,但看不到如何执行此操作。如何更改设计流程以重定向用户? 最佳答案 列为“正确”答案的答案具体指的是登录后...如果您想在登录后重定向用户,您需要覆盖以下内容:defafter_sign_up_path_for(resource)"http://www.google.com"#详情请见thewiki. 关于ruby-on-rails-使用Devis
当用户登录和退出时,设计是否有回调?这是我想出的:Warden::Manager.after_authenticationdo|user,auth,opts|user.update_attribute(:currently_signed_in,true)endWarden::Manager.before_logoutdo|user,auth,opts|user.update_attribute(:currently_signed_in,false)end这是我用来跟踪当前登录用户的工具。 最佳答案 我不是专家,但我相信回调(Hook
我正在使用存储current_sign_in_at和last_sign_in_at日期时间的设备。但是假设用户在一个月前登录但最后一次查看页面是在5分钟前?有什么方法可以显示(“5分钟前用户最后一次出现”)。 最佳答案 这个怎么样:创建迁移以向用户添加新字段以存储用户最后一次出现的日期和时间:railsgmigrationadd_last_seen_at_to_userslast_seen_at:datetime向您的应用程序Controller添加一个操作前回调:before_action:set_last_seen_at,if: