2012-10-18 3 views
5

Devits가 after_sign_in_path_for에서 제공하는 URL로 리디렉션하지 않습니다. 실제로 사용자 정의 after_sign_in_path_for을 대신 호출합니다. 그것은 내가 계산할 것으로 기대하지만, 리디렉션이 발생하지 않는 URL을 계산합니다. sign_in 페이지에 남아 있지만 실제 로그인은 이루어지지 않습니다. after_sign_in_path_for after_sign_in_path_for가 작동하지만 리디렉션이 발생하지 않습니다.

나는 유증의 여러 버전을 노력했습니다 :

gem 'devise' 

gem 'devise', :git => 'git://github.com/plataformatec/devise.git' 

같은 결과를.

after_sign_in_path_for

def after_sign_in_path_for(resource) 
    str = stored_location_for(resource) || stored_location || root_path 
    debugger 
    str 
end 

def stored_location 
    session.delete(:return_to) 
end 

def store_location 
    session[:return_to] = request.fullpath 
end 

가 호출되고 내 사용자 정의, 그것은 적절한 URL을 제공합니다 나는 그것을 줄 예상대로 정확히 str을 제공합니다. 디버거가이 시점에서 중지됩니다.

cont 이후에는 페이지가 sign_in에 머무르지 만 로그인하는 동안 발생합니다.

나는 그것이 내 코드 문제가 아니라고 생각합니다. 그것은 Devise 문제 일 수 있습니다. 누구든지 으로 작업하면 나와 함께 작동하는 Devise의 정확한 버전을 공유 할 수 있습니까?

+1

로그인 정보가 유효하다는 것을 확인할 수 있습니까? 'respond_with'는 에러가 있는지 리소스 아이템을 체크하고 제공된 위치로 이동하기 전에 사용자 정의 경로를 해결 한 후에 이것을 수행합니다 – PinnyM

답변

2

서버 로그를 보지 않고 말하기가 어렵습니다.

# app/controllers/devise/sessions_controller.rb 
# POST /resource/sign_in 
def create 
    resource = warden.authenticate!(auth_options) 
    set_flash_message(:notice, :signed_in) if is_navigational_format? 
    sign_in(resource_name, resource) 
    respond_with resource, :location => after_sign_in_path_for(resource) 
end 

The respond_with method will act sensibly according to the status of the resource : after_sign_in_path_for 호출 및 예상되는 URL을 생성하는 경우, 그 하나의 가능성을 떠난다. new 템플릿을 다시 렌더링하기 때문에 유효성 검사 오류 또는 다른 문제로 로그인하는 것을 가리 킵니다.

서버 로그를 살펴보십시오.

Started POST "/admins/sign_in" for 127.0.0.1 at 2012-10-18 09:59:27 -0700 
[INFO] [127.0.0.1] [2012-10-18 09:59:27 -0700] Processing by Devise::SessionsController#create as HTML 
[INFO] [127.0.0.1] [2012-10-18 09:59:27 -0700] Parameters: {"utf8"=>"✓", "authenticity_token"=>"DGjs2b3k8BIi62KWCn3u5kx7YxxyR03xkERcgH/ilr0=", "admin"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign in"} 
[DEBUG] [127.0.0.1] [2012-10-18 09:59:27 -0700] Admin Load (2.1ms) SELECT "admins".* FROM "admins" WHERE "admins"."email" = '[email protected]' LIMIT 1 
[DEBUG] [127.0.0.1] [2012-10-18 09:59:27 -0700] (1.0ms) BEGIN 
[DEBUG] [127.0.0.1] [2012-10-18 09:59:27 -0700] (0.9ms) UPDATE "admins" SET "last_sign_in_at" = '2012-10-18 16:53:19.428068', "current_sign_in_at" = '2012-10-18 16:59:28.076180', "last_sign_in_ip" = '127.0.0.1', "sign_in_count" = 3, "updated_at" = '2012-10-18 16:59:28.078677' WHERE "admins"."id" = 1 
[DEBUG] [127.0.0.1] [2012-10-18 09:59:27 -0700] (9.3ms) COMMIT 
[INFO] [127.0.0.1] [2012-10-18 09:59:27 -0700] Redirected to http://localhost:3001/admin/users 
[INFO] [127.0.0.1] [2012-10-18 09:59:27 -0700] Completed 302 Found in 97ms (ActiveRecord: 0.0ms) 
[INFO] [127.0.0.1] [2012-10-18 09:59:28 -0700] 

Started GET "/admin/users" for 127.0.0.1 at 2012-10-18 09:59:28 -0700 
[INFO] [127.0.0.1] [2012-10-18 09:59:28 -0700] Processing by UsersController#index as HTML 
[DEBUG] [127.0.0.1] [2012-10-18 09:59:28 -0700] Admin Load (1.2ms) SELECT "admins".* FROM "admins" WHERE "admins"."id" = 1 LIMIT 1 
[DEBUG] [127.0.0.1] [2012-10-18 09:59:28 -0700] User Load (1.0ms) SELECT "users".* FROM "users" 
[INFO] [127.0.0.1] [2012-10-18 09:59:28 -0700] Rendered users/index.html.erb within layouts/application (1.0ms) 
[INFO] [127.0.0.1] [2012-10-18 09:59:28 -0700] Completed 200 OK in 22ms (Views: 16.5ms | ActiveRecord: 2.2ms) 

것은 당신이 리디렉션보고 있습니까 : 여기에 내 응용 프로그램에서 after_sign_in_path_for 사용하여 성공적으로 로그인 이후 리디렉션입니까?

+0

예. 너는 맞다. 별난 검증 작업이있었습니다. StateMachine 얽힘 때문에 사용자가 올바르게 유효성을 검사 할 수 없습니다. 나는 그가 있었던 상태에서 사용할 수없는 이벤트를 사용자에게 발사하려했다. 도대체 무엇이. 그것은 심각한 검증 문제였습니다. statemachine 이벤트를 수정 한 후에는 모두 작동합니다. 감사합니다. – Dahan

+0

그래. 루프를 닫는 것을 수락하는 것을 잊지 마십시오. – jordanpg

+0

그래, 나에겐 사용자 모델 검증 오류로 로그인 할 수는 있지만 사용자가 업데이트 할 수 없으므로 sign_in으로 리디렉션됩니다 ... – cavpollo

관련 문제