(编辑:此代码实际上有效,错误出现在原始代码中,其中包含错误的电子邮件地址!)
我已经想出如何从控制台登录Devise,但是当我尝试从rake任务中执行相同操作时,它会在发布登录时给我401未经授权。这是我的佣金任务。 (这些相同的步骤在控制台中工作)。
task :get_home => :environment do
app = ActionDispatch::Integration::Session.new Rails.application
app.get '/users/sign_in'
p csrf_token = app.session[:_csrf_token]
app.post '/users/sign_in',{:authenticity_token => csrf_token, :user => {:email => "example@example.com", :password => "password"}}
app.get ''
p csrf_token = app.session[:_csrf_token]
app.get '/users'
File.open("users", "w+") do |f|
f.write(app.response.body)
end
end
答案 0 :(得分:2)
用户错误,我在电子邮件中输入.con而不是.com。 我一定很累,我对参数进行了双重和三重检查,并且从未注意到这一点......直到一个小时之后。 (我在帖子中更改了实际的电子邮件,但在我的代码中却不正确)
答案 1 :(得分:0)
对于较新版本的Rails,仍然需要指定参数。该行将抛出错误ArgumentError: unknown keywords: authenticity_token, user
:
app.post '/users/sign_in',{:authenticity_token => csrf_token, :user => {:email => "example@example.com", :password => "password"}}
要纠正它,只需添加参数:
app.post '/users/sign_in',{:params => {:authenticity_token => csrf_token, :user => {:email => "example@example.com", :password => "password"}}}