ruby-on-rails - tutorial - pundit rails
¿Cómo iniciar sesión en un usuario que usa Devise desde la consola de Rails? (3)
Aquí hay otro ejemplo que utiliza el token csrf, autentica al usuario y realiza una solicitud 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''
Después de cargar la consola de Rails, ¿cómo debo iniciar sesión en un usuario?
Devise proporciona una ayuda de prueba que se puede usar en pruebas y que he intentado usar en la consola:
>> include Devise::TestHelpers
>> helper.sign_in(User.first)
Pero entiendo:
NoMethodError: undefined method `env'' for nil:NilClass
De todos modos, me gustaría usar el ayudante de diseño real y no este ayudante de prueba. ¿Hay alguna forma de lograr esto?
Aquí hay una manera en que pude hacerlo:
>> ApplicationController.allow_forgery_protection = false
>> app.post(''/sign_in'', {"user"=>{"login"=>"login", "password"=>"password"}})
Entonces puedes hacer:
>> app.get ''/some_other_path_that_only_works_if_logged_in''
>> pp app.response.body
Puede agregar una acción dentro de uno de sus controladores y usar la técnica que se explica here .
class MyController < ApplicationController
# POST /my_controller/become {''email'': ''[email protected]''}
def become
raise ''not in development environment'' unless Rails.env == ''development''
sign_in User.find_by_email(params[:email])
end
end