1.3.4'ü raylarla birlikte çalıştırıyorum. Kullanıcıların oturum açabileceği iki yol var: web uygulamasını kullanarak ve bir mobil web uygulaması kullanarak (bir JSON API çağrısı aracılığıyla). İlk yol varsayılan düzenleme oturumları denetleyicisi tarafından mükemmel şekilde ele alınır. API çağrısı kimlik doğrulama yönteminin, Api::BaseController
'umu genişleten bir denetleyicide olması gerekir. Bu yöntemle girişDevise: Birden çok denetleyicinin kullanıcı oturumlarını ele almasını sağlayın
class Api::UserSessionsController < Api::BaseController
…
def create
user = warden.authenticate(:scope => :user)
if user
sign_in(:user, user)
else
# Do some error handling
end
end
end
girişimleri Devise::Strategies::Authenticatable
yılında valid_controller?
yönteme bağlı başarısız: Yani böyle bu ikinci kontrolör yazdı. Varsayılan denetleyiciyi (devise/sessions
) kullanıcılar için eşlenen denetleyici olarak bıraktığımdan, özel denetleyicimden kimlik doğrulamasına izin vermez.
Ben Devise::SessionsController
benim kendi alt sınıf içine benim özel işlevler rulo istiyorum amaAPI::BaseController
uzatmak için API oturumları denetleyicisi ihtiyaç , bu yüzden de Devise::SessionsController
uzatamaz. Özellikle denetleyici denetleyicisinden bunları kopyalamayı gerektirdiği için, API denetleyicisindeki çalışma, varsayılan davranış web uygulama kimlik doğrulama yöntemlerini yerleştirmek istemiyorum.
Herhangi bir öneriniz var mı? Birden fazla denetleyicinin oturumları işlemesine izin veren bazı yapılandırmalar var mı? valid_controller?
yöntemi, .include?
değil, ==
karşılaştırması yapar, dolayısıyla bunun nasıl olacağını göremiyorum.
GÜNCELLEME
Bu korkunç geçici bir çözümdür. Bunu sevmiyorum, bu yüzden bir cevap olarak yayınlamıyorum, ama tüm cevaplayıcı türleri için düşünce için yiyecek önerebileceğini düşündüm:
Oluşturma yöntemimin en üstünde Devise'nin oturum denetleyicisi olmasını beklediğini geçersiz kıl.
Devise.mappings[:user].controllers[:sessions] = params[:controller]
Bu
hazırlamak amaçlanan işlevselliği etrafında çalışmaktadır (oturum oluşturma yapmak için tek ve belirli denetleyici gerektiren) bu yüzden tutmak istemiyoruz. Bu kısıtlamanın bir güvenlik önlemi mi yoksa sadece bir kongre mi olduğunu merak ediyorum - eğer güvenlik içinse, bu muhtemelen oldukça kötü.
Bu oldukça iyi bir fikir. Kesinlikle benimkinden daha az brüt. 'Valid_controller' içinde '.include?' Yapmak için yaya yollarını çizmeyi düşünüyordum ve güzergah bildirimlerimde bir dizi sağladım. – andrewmitchell