2011-02-08 62 views
43

加載Rails控制檯後,我應該如何登錄用戶?如何使用Rails控制檯中的Devise登錄用戶?

設計提供了一個測試的輔助,可以在測試中使用,我試着在控制檯的使用方法:

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

,但我得到:

NoMethodError: undefined method `env' for nil:NilClass 

無論如何,我想用真正的設計助手,而不是這個測試助手。有什麼辦法可以做到這一點?

回答

73

這裏有一種方法我能做到這一點:

>> 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 
+0

它完美的作品! Thankx很多! – Christian 2011-02-08 04:06:41

+0

你讓我的一天! – 2014-09-01 11:01:18

+2

隨着現代設計,你將不得不使用`電子郵件`而不是`登錄':`app.post('/ sign_in',{「user」=> {「email」=>「login」,「password」=>密碼「}})` – Xavier 2016-07-23 23:44:33

9

這裏是它使用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' 
-2

您可以在控制器內添加一個動作,並使用解釋爲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 
相關問題