Chr*_*ian 50 console ruby-on-rails devise
加载Rails控制台后,我该如何登录用户?
Devise提供了一个测试助手,可以在测试中使用,我试图在控制台中使用:
>> include Devise::TestHelpers
>> helper.sign_in(User.first)
Run Code Online (Sandbox Code Playgroud)
但我得到:
NoMethodError: undefined method `env' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
无论如何,我想使用真正的设计助手而不是这个测试助手.有没有办法实现这个目标?
Bri*_*ing 83
这是我能够做到的一种方式:
>> ApplicationController.allow_forgery_protection = false
>> app.post('/sign_in', {"user"=>{"login"=>"login", "password"=>"password"}})
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
>> app.get '/some_other_path_that_only_works_if_logged_in'
>> pp app.response.body
Run Code Online (Sandbox Code Playgroud)
小智 16
这是另一个使用csrf令牌,验证用户身份并发出POST/GET请求的示例.
# get csrf token
app.get '/users/sign_in'
csrf_token = app.session[:_csrf_token]
# log in
app.post('/users/sign_in', {"authenticity_token"=>csrf_token, "user"=>{"email"=>"foo", "password"=>"bar"}})
# get new csrf token, as auth user
app.get ''
csrf_token = app.session[:_csrf_token]
# make a POST request
app.post '/some_request.json', {"some_value"=>"wee", "authenticity_token"=>csrf_token}
# make a GET request
app.get '/some_other_request.json'
Run Code Online (Sandbox Code Playgroud)
小智 5
需要注意的是,从Rails 5开始,参数解析已更改为仅采用一个参数和参数(而不是参数作为第二个参数)。
ActionDispatch::ParamsParser 已弃用并已从中间件堆栈中删除。要配置参数解析器,请使用 ActionDispatch::Request.parameter_parsers=
因此,如果不修补中间件,这些早期的示例将不再适用于现代 Rails。要使它们工作,只需将参数包含在 POST 参数中,例如:
app.post('/users/sign_in', {"user"=>{"email"=>"me@mail.com", "password"=>"mycoolpassword"}}) <-- 不再有效
app.post('/users/sign_in', params: {"user"=>{"email"=>"me@mail.com", "password"=>"mycoolpassword"}})<--有效
| 归档时间: |
|
| 查看次数: |
20306 次 |
| 最近记录: |