我的理解是Rails的测试环境在每次测试之前被拆除并重建......所以我如何测试一个需要用户登录的控制器,如果没有Device的可确认模块阻碍,则无法创建用户?
Devise 推荐的方法(下面)创建一个新用户,然后由Devise的confirmable模块发送一封电子邮件.我如何解决这个问题,所以我不是每次都"创建"一个用户......或者如果我是的话,我可以得到一个对象来测试每个规范的"模拟"新电子邮件吗?
before(:each) do
@user = Factory.create(:user)
sign_in @user
end
Run Code Online (Sandbox Code Playgroud)
我敢肯定我会忽略一些非常明显的东西,因为对于任何使用Devise并且可以确认的人来说这一定是一个非常常见的规范.
我有一个带有输入字段/标签等的表单.如何在字段旁边显示错误消息?而不是在顶部聚集在一起?
我正在使用设计,导轨3
我把它放在表格的顶部:
= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f|
- if resource.errors.any?
#errorExplanation
%h2
= pluralize(resource.errors.count, "error")
prevented this user from being saved:
%ul
- resource.errors.full_messages.each do |msg|
%li
= msg
Run Code Online (Sandbox Code Playgroud) 使用Resque和Devise,我有用户的角色,如:
User.first.role #=> admin
User.last.role #=> regular
Run Code Online (Sandbox Code Playgroud)
我想为Resque设置身份验证.所以,在config/routes.rb里面我有:
namespace :admin do
mount Resque::Server.new, :at => "/resque", :as => :resque
end
Run Code Online (Sandbox Code Playgroud)
当然,所有登录用户都可以访问它.
有没有办法使用User.role的角色?只有具有"admin"角色的用户才能访问它.
非常感谢.
我正在使用Devise来允许用户注册,以及使用我自己的用户admin来手动创建用户.当我在管理员中创建用户时,Devise会立即向新用户发送确认.我相信这是因为设计和我的管理员都使用相同的模型.在管理员准备发送此电子邮件之前,如何延迟此电子邮件?
此外,Devise的验证要求管理员为新用户设置密码.我更希望手动创建的用户在回复确认时指定自己的密码.现在手动创建的用户将不知道他们的密码,除非我在补充电子邮件中发送它们.
在我的spec_helper.rb中,我有
config.include Devise::TestHelpers, :type => :controller
Run Code Online (Sandbox Code Playgroud)
这样我就可以实际测试需要用户进行身份验证的控制器.但是,请求中同一类的规范也需要登录,否则测试将失败.我试过了
config.include Devise::TestHelpers, :type => :request
Run Code Online (Sandbox Code Playgroud)
但这也不起作用.我似乎无法找到我可以传递给rspec include或extend方法的类型选项.我假设:模型和:视图会在那里,但其他我完全不确定.我应该使用什么,以便我的请求规范可以通过,并且有一个不同类型的列表:类型?
我正在尝试编写一个请求测试,断言应用程序布局上显示正确的链接,具体取决于用户是登录还是退出.FWIW,我正在使用Devise进行身份验证.
这是我的规格:
require 'spec_helper'
require 'devise/test_helpers'
describe "Layout Links" do
context "the home page" do
context "session controls" do
context "for an authenticated user" do
before do
# I know these should all operate in isolation, but I
# want to make sure the user is explicitly logged out
visit destroy_user_session_path
@user = Factory(:user, :password => "Asd123", :password_confirmation => "Asd123")
@user.confirm!
# I tried adding this per the Devise wiki, but no change
@request.env["devise.mapping"] = Devise.mappings[:user]
# Now log a …Run Code Online (Sandbox Code Playgroud) 我似乎为我的用户身份验证设置了Devise,并设置了:确认选项.
当我在浏览器中运行它时,一切似乎运行良好,我注册,转到我的rails s控制台中的服务器日志中显示的确认URL .
但是,当我尝试将以下内容添加到我的db/seed.rb时
User.create!(:username => 'haar', :email => 'haar@example.com', :password => 'password', :password_confirmation => 'password')
Run Code Online (Sandbox Code Playgroud)
并运行 rake db:setup --trace
我收到以下错误:
rake aborted!
undefined method `confirmation_url' for #<#<Class:0x1062f79a0>:0x1062f6618>
/Users/haar/Dropbox/Websites/TenOutOfTen/app/views/devise/mailer/confirmation_instructions.html.haml:4:in `_app_views_devise_mailer_confirmation_instructions_html_haml___1737567023_2199377480_0'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionpack-3.0.8/lib/action_view/template.rb:135:in `send'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionpack-3.0.8/lib/action_view/template.rb:135:in `render'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/activesupport-3.0.8/lib/active_support/notifications.rb:54:in `instrument'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionpack-3.0.8/lib/action_view/template.rb:127:in `render'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionpack-3.0.8/lib/action_view/render/rendering.rb:59:in `_render_template'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/activesupport-3.0.8/lib/active_support/notifications.rb:52:in `instrument'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/activesupport-3.0.8/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/activesupport-3.0.8/lib/active_support/notifications.rb:52:in `instrument'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionpack-3.0.8/lib/action_view/render/rendering.rb:56:in `_render_template'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionpack-3.0.8/lib/action_view/render/rendering.rb:26:in `render_without_haml'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/haml-3.1.3/lib/haml/helpers/action_view_mods.rb:13:in `render'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionpack-3.0.8/lib/abstract_controller/rendering.rb:115:in `_render_template'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionpack-3.0.8/lib/abstract_controller/rendering.rb:109:in `render_to_body'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionpack-3.0.8/lib/abstract_controller/rendering.rb:102:in `render_to_string'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionpack-3.0.8/lib/abstract_controller/rendering.rb:93:in `render'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionmailer-3.0.8/lib/action_mailer/deprecated_api.rb:111:in `render'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionmailer-3.0.8/lib/action_mailer/base.rb:735:in `collect_responses_and_parts_order'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionmailer-3.0.8/lib/action_mailer/base.rb:750:in `each'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionmailer-3.0.8/lib/action_mailer/base.rb:750:in `each_template'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionmailer-3.0.8/lib/action_mailer/base.rb:745:in `each'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionmailer-3.0.8/lib/action_mailer/base.rb:745:in `each_template'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionmailer-3.0.8/lib/action_mailer/base.rb:731:in `collect_responses_and_parts_order'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionmailer-3.0.8/lib/action_mailer/base.rb:673:in `mail'
/Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/devise-1.4.5/lib/devise/mailers/helpers.rb:21:in …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用PhoneGap,jQuery Mobile和Backbone.js在客户端构建移动应用程序 - 使用运行服务器端的Rails 3 JSON API.
我知道如何在经过身份验证后从服务器获取令牌,但我不知道如何将"token_auth"键/值附加到Backbone.js将对我的服务器进行的所有AJAX请求.
这是我目前的流程:
我看过http://documentcloud.github.com/backbone/#Sync可能会覆盖AJAX调用 - 但这对于这个简单的任务来说似乎非常极端.
有没有人有运行Devise token_authentication和Backbone.js的经验?
我正在尝试使用Devisefor my Rails/ iOSapp 实现用户身份验证.我遇到了麻烦,因为我主要是Devise 的" 用户 ",并且正在将它用于纯网络应用程序,所以不需要为幕后发生的事情烦恼太多.现在我必须为基于API的应用程序构建身份验证,这完全是一个不同的世界.
我已经阅读了网络上处理这个主题的每一个教程(由于token_authenticatable已被弃用的事实,它们中的大多数已经过时)但仍然无法理解我需要做什么.
我还阅读了GitHub关于这个问题的原始要点,但仍然不明白他们在谈论什么.
我确信有些人就像我一样,只是一个" 用户 ",Devise所以不知道幕后发生了什么.
任何人都可以为移动应用程序实现基于API的身份验证系统提供简洁的解决方案吗?我的意思是它不可能那么复杂,Devise以前太棒了,因为我需要做的就是跑步rails generate,但这对我来说是个噩梦.
我有一个页面的路径是(例如)/ premises/92我正在显示"请[登录]或[注册]以获取更多信息"如果用户没有登录,我想要设计返回相同的用户登录后的/ premises/92页面.
我已经阅读了其他帖子,我想我理解设计stored_location_for应该如何工作.理论上,我可以把这样的东西放在我的ApplicationController:
def stored_location_for(resource)
if (r = session[:return_to])
session[:return_to] = nil
r
else
super
end
end
Run Code Online (Sandbox Code Playgroud)
我的问题是:我如何/在哪里设置会话[:return_to]?
我只想在用户点击[登录]或[注册]时设置会话[:return_to],但最好的方法是什么?
?return_to=/premises/92查询字符串添加到[登录]和[注册]链接,并在RegistrationsController和SessionsController中检测并使用该信息设置会话[:return_to]?这似乎会起作用,但也很苛刻.这些都闻不对劲.为stored_location_for设置状态的普遍接受的技术是什么?