2011-02-08 13 views
43

Po załadowaniu konsoli Rails, jak mam się zalogować?Jak zalogować się do użytkownika za pomocą programu Devise z konsoli Rails?

Devise zapewnia pomocnika testowy, który może być używany w testach i starałem się używać w konsoli:

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

Ale otrzymuję:

NoMethodError: undefined method `env' for nil:NilClass 

W każdym razie, chciałbym użyć prawdziwy pomocnik, a nie ten pomocnik testowy. Czy jest jakiś sposób, aby to osiągnąć?

Odpowiedz

73

Oto jeden sposób udało mi się zrobić:

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

Następnie można zrobić:

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

Działa doskonale! Dziękuję bardzo! – Christian

+0

Zrobiłeś mój dzień! –

+2

W nowoczesnym Devise będziesz musiał użyć 'email' zamiast' login': 'app.post ('/ sign_in', {" user "=> {" email "=>" login "," password "=>" hasło "}})' – Xavier

9

Oto kolejny przykład, który używa token CSRF, uwierzytelnia użytkownika i sprawia, że Żądanie 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' 
+0

stara odpowiedź, ale wciąż. To było właściwe dla mnie! –

-2

Możesz dodać akcję wewnątrz jednego kontrolera, a następnie za pomocą techniki wyjaśnione 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 
+0

To tak naprawdę nie jest odpowiedzią na pytanie, ponieważ pytanie dotyczy * podpisania iin z konsoli *, a nie zalogowania się jako inny użytkownik z aplikacji internetowej. – Carpetsmoker

+0

Ale nadal pomocne, możesz wywołać tę metodę także z konsoli. Przyszedłem przeszukać google tutaj i tak powyżej odpowiedzi są ładne i działające, ale ten jest również dla mnie pomocny. Więc nie dawaj negatywnych głosów komuś takiemu. – user1735921

Powiązane problemy