2016-01-12 24 views
6

Bir MEAN uygulaması geliştiriyorum. Kimlik doğrulama için yerel, facebook ve google stratejileri için pasaport kullanıyorum., pasaport-facebook geri bildirimini açısal istemcide nasıl ele alır?

Angularjs istemcisini kullanıyorum. Tüm yönlendirme, istemcide ele alınır. Sadece sunucu veri apis alıyorum.

Pasaport facebook stratejisini kullanırken, pasaport belgelerine göre aşağıdaki kodu kullanıyorum. Karşılıklı

app.get('/auth/facebook',passport.authenticate('facebook-auth', { scope : ['email'] })); 
    app.get('/auth/facebook/callback',passport.authenticate('facebook-auth', { 
     successRedirect : '/home', 
     failureRedirect : '/login', 
     scope:['email'] 
    })); 

Sorun olduğunda renkli "Facebook kullanarak oturum açın" kullanıcı tıklama sonunda doğrulamak için facebook sayfasına yönlendirecek edecek "/ auth/facebook" rota erişecek

<a href="/auth/facebook" class="btn"><i class="fa fa-facebook"></i> Sign in using Facebook</a> 

İstemci Kullanıcının kimlik bilgileri.

Başarılı bir doğrulamadan sonra, kullanıcı "successRedirect" değerinde tanımlanan şekilde "/ home" yoluna yönlendirilecek.

Şimdi, başarı veya başarısızlık için yönlendirmeler tanımlamak yerine özel geri çağırma işlevini kullanmak istiyorum. Aşağıda gibi görünecektir: İstemci "auth/facebook/geri arama" rota aramıyor olarak burada bakacak am

app.get('/auth/facebook/callback',passport.authenticate('facebook-auth', function(err,user,info){ 
    if(err){ 
      throw err; 
     } 
     else if(user === 'userexists'){ 
      res.json({ 
       'state':false, 
       'message':'User with this e-mail already exists' 
      }); 
     } 
     else{ 
      req.logIn(user,function(loginErr){ 
       if(loginErr){ 
        throw loginErr; 
       } 
       res.json({ 
        'state':true, 
        'message':'You logged in successfully!' 
       }); 
      }); 
     } 
})); 

kök sorun, ben özel callback'inde yukarıda kullanamaz, o facebook tarafından çağrılır. Yani, müşteri tarafında geri bildirimin yanıtını yakalamak için bekleyen başarı işleyicisi yok!

Sunucu tarafında yeniden yönlendirmeyi ortadan kaldırmak için istemcide json biçiminde yanıt almanın ve ayrıca facebook tarafından başarılı bir kimlik doğrulamasının ardından istemciye mesaj ve kullanıcı adını iletmenin bir yolunun olmasını istiyorum.

Pasaporttan vazgeçmek üzereyim. Çok fazla kod çıkarmadan önce olası bir çözüm için umut!

Teşekkür

cevap

2

Bu facebook geri arama işleyicisi içinde başka bitiş noktasına yönlendirme yapılabilir. Facebook'tan geri aramada res.json() yapmanıza gerek yoktur, çünkü yalnızca yetkilendirmenin başarısız veya başarılı olup olmadığını bildirmek için bir istekte bulunurlar. From their docs: onlar /auth/fb/callback çağırdığınızda

// GET /auth/facebook/callback 
// Use passport.authenticate() as route middleware to authenticate the 
// request. If authentication fails, the user will be redirected back to the 
// login page. Otherwise, the primary route function function will be called, 
// which, in this example, will redirect the user to the home page. 

Yani facebook döner size geri isteği işlemi üzerinde kontrol ama sonra ne size kalmış. Bir kez kullanıcı başarıyla doğrulandıktan sonra, tüm oturum boyunca kullanılabilir req.user olurdu. Bu noktada, /account örneğindeki gibi bir şeye yönlendirebilir ve req.isAuthenticated() ile req.user olup olmadığını kontrol edebilir ve istediğiniz akışı tamamlayabilirsiniz.

+0

Net cevap için çok teşekkürler! – Designeer

+0

@Designeer, rica ederim. Daha fazla sorunla karşılaştığınızda geri gönderebilirsiniz: D – onel0p3z

+0

@ onel0p3z Ben de aynı şeyi açısal yerine tepki olarak yapıyorum. Sunucum Düğümde ve hızlı kullanıyorum. Sunucu tarafıma pasaport facebook'u başarıyla uyguladım. Şimdi '/ auth/facebook' çağrısını çapa etiketiyle yanıtlamıyorum. Ancak, yalnızca sunucu tarafından ele alındığı ve bu sunucuda response.redirect aracılığıyla ele almak istemediğim için, yanıt için bunun yanıtını nasıl geri alacağımı bilmiyorum. Bu senaryoyu nasıl ele alacağınızı önerebilir misiniz? – Vijay

İlgili konular