After loading the Rails console, how should I sign in a user?
Devise provides a test helper which can be used in tests and I've tried to use in console:
>> include Devise::TestHelpers >> helper.sign_in(User.first)
But I get:
NoMethodError: undefined method `env' for nil:NilClass
Anyway, I would like to use the real devise helper and not this test helper. Is there any way to achieve this?
Devise creates all the code and routes required to create accounts, log in, log out, etc. Make sure your rails server is running, open http://localhost:3000/users/sign_up and create your user account.
Here's one way I was able to do it:
>> ApplicationController.allow_forgery_protection = false >> app.post('/sign_in', {"user"=>{"login"=>"login", "password"=>"password"}})
Then you can do:
>> app.get '/some_other_path_that_only_works_if_logged_in' >> pp app.response.body
Here is another example which uses the csrf token, authenticates the user, and makes a POST/GET request.
# 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'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With