¿Cómo iniciar sesión en un usuario que usa Devise desde la consola de Rails?

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 

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' 

Puede agregar una acción dentro de uno de sus controladores y usar la técnica que se explica aquí .

 class MyController < ApplicationController # POST /my_controller/become {'email': 'test@example.com'} def become raise 'not in development environment' unless Rails.env == 'development' sign_in User.find_by_email(params[:email]) end end