2012-10-18 16 views
5

Devise, after_sign_in_path_for tarafından sağlanan URL'ye yeniden yönlendirmez. Aslında bunun yerine özel after_sign_in_path_for çağrılarımı çağırır. Hesaplamayı beklediğim URL'yi hesaplar, ancak yeniden yönlendirme gerçekleşmez. sign_in sayfasında kalır, ancak gerçek oturum açma gerçekleşmez. Devre after_sign_in_path_for çalışır, ancak yeniden yönlendirme gerçekleşmez.

Ben vasiyetle farklı versiyonlarını çalışıyor ettik:

gem 'devise' 

ve

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

aynı sonucu.

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 

aranıyor Benim özel, o doğru url verir bunu vermek için bekliyoruz tam olarak str verir. Debugger bu noktada durur ...

Ama bununla birlikte imza gerçekleştirilirken cont sonra sayfa, sign_in kalır

.

Bu benim kod sorunum değil inanıyorum. Bir Devise konusu olabilir. üzerinde çalışan herkes, benimle birlikte çalıştığı Devise'nin tam sürümünü paylaştırabilir.

+1

Giriş bilgilerinin geçerli olduğunu doğrulayabilir misiniz? 'response_with', sağlanan konuma ilerlemeden önce hatalar için kaynak öğesini kontrol edecek ve bunu, – PinnyM

cevap

2

Sunucu günlüklerinizi görmeden söylemek zor.

# 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 denilen ve beklenen URL üreten ediliyorsa, o zaman da geriye tek seçenek kalıyor. new şablonunu tekrar oluşturduğundan, bir tür doğrulama hatası veya oturum açarken başka bir sorun olduğunu gösterir.

Sunucu günlüklerine bakın.

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) 

bunu yönlendirmesi görüşüyorsun: İşte benim uygulamasından after_sign_in_path_for kullanarak başarılı işareti ve sonraki yönlendirme nedir?

+0

özel yolunuzu çözdükten sonra yapacağız. Tamamen haklısın. Garip bir doğrulama olayı vardı. StateMachine dolanması nedeniyle kullanıcı doğru bir şekilde doğrulanamadı. Bir kullanıcıya bir olay üzerinde ateş etmeye çalışıyordum, bu da bulunduğu eyaletten mevcut değil. Her neyse. Derin bir doğrulama meselesiydi. Statemachine olaylarını tamir ettikten sonra, hepsi çalışır. Teşekkürler! – Dahan

+0

Elbette. Döngüyü kapatmak için kabul etmeyi unutma. – jordanpg

+0

Yup, benim için bir kullanıcı model doğrulama hatasıydı, ancak giriş yapmasına izin verilmiş olsa da, kullanıcının güncellenmesine izin vermedi, dolayısıyla sign_in yönlendirme ... – cavpollo