2011-01-26 29 views
25

ben hazırlamak ve Omniauth ile benim raylar App için kullanıcı kimlik doğrulama kurdum. Şimdi, oluşturmak istediğim bir Android ve iPhone uygulaması için aynı kimliği kullanmaya başladığım yeri merak ediyorum. Devise Omniauth ve Iphone/Android App

benim/auth/facebook mobil bir sürümünü kullanmalıyım yoksa doğrudan uygulamanın bir istek gönderebilir ki?

Bu oldukça genel bir soru ama ben bakmak için hiçbir yerde buldum.

DÜZENLEME: Sadece sana Omniauth/Facebook-token kısmını kaçırıyorum, RESTful API ile kullanımı uygulamasına Jetonu Auth ekledik.

+0

duymak mutluluk duyarız Ben Facebook SDK Android uygulamam olarak ayarlandığını, ancak öyle görünüyor var Ben geri almak benim raylar uygulama veritabanında sahip olduğumdan aynı değil, bu yüzden ben onları kullanıcı auth için karşılaştıramazsınız! – rnaud

cevap

36

Pekala, o benim kendi soru yanıtlama.

Facebook SDK'u kullanırsanız, SSO cihazda oldukça iyi çalışır, ancak, aldığınız belirteç, Rails Uygulamanızda alacağınız ile aynı değildir. Görünüşe göre Facebook, desteğe bağlı olarak farklı belirteçler yaratıyor. Yaptığım Peki

oldu: Ben Android cihazında belirteci bize ulaştığında, uygulama URL'si aracılığıyla benim raylar gönderin:

http://myapp/check_mobile_login?token=FB_MOBILE_TOKEN 

Bu daha sonra kullandığı benim Uygulama kontrolörü tarafından yakalanır Kullanıcı verilerini almak için fb_graph gem ile Token. Jeton geçerliyse, bazı bilgi parçaları alacağım. Sonra veritabanımla kontrol ediyorum ve aynı UID'yi bulursam, kullanıcı kimliğimi doğrular ve Devise'den Authentificable_token dosyasını geri gönderirim.

Ve taslak kodu: herkes daha iyi bir çözüm varsa

def check_mobile_login 
     token = params[:token] 

     user = FbGraph::User.me(token) 
     user = user.fetch 

     logged = User.find_by_uid(user.identifier) 

     respond_to do |format| 
      format.html # index.html.erb 
      format.json { render :json => logged.authentication_token } 
     end 
    end 

, bunu :)

+0

Merhaba, ben de aynı şeyi yapmaya çalışıyorum ve tam olarak nerede "sign_in" tasarladığını merak ediyorum, bu yüzden kimlik doğrulama_token raylar uygulamanızın içinde üretilecek? – refaelos

+0

Ekleme: En vasiyetle beyanına token_authenticatable Kullanıcı modelinde, daha sonra her yeni kullanıcı bir sonraki istekleri ile giriş için kullanabileceğiniz bir "authentication_token" alacak. – rnaud

+0

evet, ancak süresi dolduğunda bir jetonu yenilemek için "sign_in" yapmalısınız. Ayrıca kullanıcının current_user olması için "sign_in" yazmanız gerekir. – refaelos

İlgili konular