2012-05-30 15 views
5

Oturum açma işlemimde Devise ve Omniauth kullanıyorum. Bazı nedenlerden dolayı, "kullanıcı/auth/facebook" veya "users/auth/twitter" rotalarına erişebiliyorum. Ancak, rake rotaları yaparken görünmüyorlar, bu yüzden bu yolları elde etmek için yardımcı metodun ne olduğu hakkında hiçbir fikrim yok (ör., Bir şey_something_path). Birisi bana yardım edebilir mi?Rota rotayı göstermiyor, ancak sabit kodlanmış

benim yollarının gösteremiyoruz ama "/ kullanıcılar/kimlik doğrulama/..." meydana çıkıyor uyan tek yol (tırmık yolları itibaren) bu biri olduğunu söyleyebiliriz:

user_omniauth_callback  /users/auth/:action/callback(.:format) {:action=>/(?!)/, :controller=>"users/omniauth_callbacks"} 

<%= link_to "Connect", "users/auth/facebook" %> 

Ayrıca yolları omniauth yolları geliştirilmelidir varsayılan olmalıdır:

BTW, ben "sadece iyi rotayı erişebilir" deyince, bu (facebook veya twitter doğru beni yönlendirir) çalışır anlamına kullanıcı modeli için

cevap

4

neden bu doesn için: Eğer vasiyetle uygulanması bakmak Ayrıca

<%= link_to "Sign in with Facebook", user_omniauth_authorize_path(:facebook) %> 

, URL yardımcıları olduğunu görebilirsiniz rake routes'da görünme, ilk önce görevin nasıl yapıldığını not edin. Bu railties parçası olduğunu ve as such göstermek için yolları alır:

Rails.application.routes.routes 

yüzden onun rotalar için Rails.application soran olduğunu görebiliriz. Omniauth gem "Raf middleware kullanan bir esnek kimlik doğrulama sistemi" olduğu


Sonraki not.

Raf ara katman yazılımını kullandığı için, rake routes tarafından kullanılan Rails.application ile ilgili bir şey 'bilmiyorum' ve bu nedenle bu görevdeki yolları görünmez.

this Railcast numaralı kitapta Raf ara katman yazılımına iyi bir giriş yapabilirsiniz.


biz OmniAuth::Builder yığını içinde raylar app önce gelecek şekilde rake middleware görebilirsiniz biraz daha derin Delving. Peki auth/twitter rotasını nasıl ele alıyor?

O kadar onun call bir request_path kontrol ederek, çeki here görebilirsiniz etmez ve request_pathhere (path_prefix varsayılan olarak auth ve sizin durumunuzda nametwitter olduğunu nasıl inşa edildiğini görebiliriz.

here belirtildiği gibi

bir cihazla birlikte Omniauth kullanarak path_prefix, otomatik olarak ayarlanır.

+1

Mükemmel cevap ve harika saç kesimi! ;) – asymmetric

0

Neden komisyon rotalarında görünmüyorlar, emin değilim. Onların takma bilmek istiyorum Ama eğer burada bulabilirsiniz: kendi Dokümanlar https://github.com/plataformatec/devise/wiki/OmniAuth%3A-Overview

:

Halen geliştirilmelidir sadece tek bir model omniauthable yapmanızı sağlar. model adında Kullanıcı omniauthable ve yaptıktan sonra eğer

user_omniauth_authorize_path (sağlayıcı) user_omniauth_callback_path (sağlayıcı)

: " devise_for: Kullanıcıların" zaten config/routes.rb eklendi, Devise aşağıdaki url yöntemleri yaratacak

Rotalarınızda devise_for :model varsa, bu URL yöntemini görmelisiniz.

Örnek:

ilişkin olarak

https://github.com/plataformatec/devise/blob/master/lib/devise/omniauth/url_helpers.rb

+0

Evet .. Bu çalıştı ama ne yazık ki ya çalışmıyor. Tanımsız yöntem hatası. :( – varatis

+0

hangi ver omniauth'un syonu nu kullanıyor? 1.0? –

+0

Evet, 1.0 – varatis

İlgili konular