2012-10-18 21 views
5

डेविस after_sign_in_path_for द्वारा प्रदान किए गए यूआरएल पर रीडायरेक्ट नहीं करता है। यह वास्तव में इसके बजाय मेरे कस्टम after_sign_in_path_for पर कॉल करता है। यह यूआरएल की गणना करता है, कि मैं इसकी गणना करने की अपेक्षा करता हूं, लेकिन फिर पुनर्निर्देशन नहीं होता है। यह sign_in पृष्ठ पर बना हुआ है, लेकिन वास्तविक साइन इन नहीं होता है।काम करता है 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 

बुलाया जा रहा है, यह उचित यूआरएल देता है, str देता है वास्तव में मैं इसे देने के लिए उम्मीद के रूप में। डीबगर इस बिंदु पर बंद हो जाता है ...

लेकिन cont के बाद पृष्ठ sign_in पर रहता है, हालांकि साइन इन होता है।

मेरा मानना ​​है कि यह मेरा कोड मुद्दा नहीं है। यह एक देवता मुद्दा हो सकता है। क्या कोई भी, जिसके पास काम कर रहा है, मेरे साथ डेविस का सटीक संस्करण साझा करें, जो आपके साथ काम करता है।

+1

क्या आप पुष्टि कर सकते हैं कि लॉगिन जानकारी मान्य है? 'answer_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 उलझन के कारण उपयोगकर्ता ठीक से मान्य नहीं कर सका। मैं एक उपयोगकर्ता को एक घटना पर आग लगाने की कोशिश कर रहा था, जो उस राज्य से उपलब्ध नहीं था, जहां वह था। जो कुछ। यह एक गहरा सत्यापन मुद्दा था। राज्यमाचिन घटनाओं को ठीक करने के बाद, यह सब काम करता है। धन्यवाद! – Dahan

+0

निश्चित बात। लूप को बंद करने के लिए स्वीकार करने के लिए मत भूलना। – jordanpg

+0

हाँ, मेरे लिए यह एक उपयोगकर्ता मॉडल सत्यापन त्रुटि थी, हालांकि लॉग इन करने की अनुमति दी गई थी, उपयोगकर्ता को अद्यतन करने की अनुमति नहीं दी गई थी, इसलिए साइन_इन पर रीडायरेक्ट ... – cavpollo

संबंधित मुद्दे