如何从Rails控制台使用Deviselogin用户?

加载Rails控制台后,我应该如何login一个用户?

devise提供了一个testing助手,可以在testing中使用,我试图在控制台中使用:

>> include Devise::TestHelpers >> helper.sign_in(User.first) 

但是我得到:

 NoMethodError: undefined method `env' for nil:NilClass 

无论如何,我想用真正的devise助手,而不是这个testing助手。 有没有办法做到这一点?

这是我能够做到的一个方法:

 >> ApplicationController.allow_forgery_protection = false >> app.post('/sign_in', {"user"=>{"login"=>"login", "password"=>"password"}}) 

那你可以这样做:

  >> app.get '/some_other_path_that_only_works_if_logged_in' >> pp app.response.body 

这里是另一个使用csrf令牌的例子,authentication用户,并发出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' 

你可以在你的控制器中添加一个动作,并使用这里解释的技巧。

 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