2015-06-11 22 views
10

Geri döngü ve pasaportlu bir API geliştiriyorum. Oldukça iyi olan bu örneği gördüm: Giriş yapmak içinLoopback passport mobile login

  1. Bir ziyaretçi istekleri: belgelerinde

    https://github.com/strongloop/loopback-example-passport

    , onlar geri döngü üçüncü taraf sağlayıcılar aracılığıyla kullanıcıların kimliğini doğrulamak için bu adımı takip söylemek bir bağlantıya tıklayarak Facebook'u kullanarak veya oAuth 2.0 yetkilendirmesini başlatmak için LoopBack tarafından desteklenen düğmesini kullanın.
  2. loopback böylece kullanıcı
  3. Facebook OAuth 2.0 yetkilendirme kodu ile geri döngü tarafından barındırılan bir geri arama URL'ye tarayıcı yönlendirir geri dönüş gösterilmektedir Facebook ve erişim izinleri giriş yapabilir Facebook'un yetkilendirme uç noktası tarayıcıyı yönlendirir
  4. loopback markaları Facebook anahtarı bitiş noktasına bir istek UserIdent
  5. loopback kullanıcının Facebook profil
  6. loopback almak için erişim belirteci kullanan yetki kodunu aramaların kullanarak erişim jetonu almak üzere için mevcut bir LoopBack kullanıcısı olduğunu görmek için (sağlayıcı, externalId) modeline göre ity modeli Varsa, LoopBack kullanıcısını geçerli bağlama ayarlayın Değilse, profilden bir LoopBack kullanıcısı oluşturun ve karşılık gelen bir kayıt oluşturun. 3. taraf girişini takip etmek için UserIdentity. Yeni oluşturulan kullanıcıyı mevcut içeriğe ayarlayın.

Sorularım, bazı kullanıcıların bir mobil uygulama kullanarak bir erişim belirteci aldığını varsayalım, bu kullanıcının Loopback Passport kullanarak isteklerini nasıl doğrulayabilirim?

Teşekkür

cevap

10

Aynı konuda, How integrate loopback third-party login for android hakkında benzer bir konu açmıştı. Sonra bunun için bir çözüm buldum.

Her şeyden önce, bir geri döngü kullanıcısının aynı anda daha fazla erişim jetonuna sahip olabileceğini söylemek önemlidir. Web sitenizden veya mobil uygulamanızdan giriş yaptığınızda, geridöngü her seferinde bir erişim jetonu oluşturur.

Erişime belirteci almak için yaklaşık soruyorsan, zaten bunu yapmanın bir yolu yoktur, bu yüzden yapmanız gereken o

User.login({username: 'foo', password: 'bar'}, function(err, accessToken) { 
    console.log(accessToken); 
}); 

tek şey gibi giriş yöntemi kullanarak erişim belirteçleri alabilirsiniz Android uygulamasından bu barındırılan yöntemi çağırıyor. Eğer sosyal ağ hesabı olan kullanıcılar giriş yapmış olmak ve daha sonra erişmek için, ilgili soruyorsan Sadece o

app.post('/android/custom_login', function(req, res){ 
    var username = req.body.username; 
    var password = req.body.password; 

    User.login({username: username , password: password }, function(err, accessToken) { 
     console.log(accessToken); 
     return res.send(accessToken); 
    }); 
}); 

gibi, sunucuya geri döngü android sdk (uygun şekilde) veya yükleme adını ve şifresini kullanabilir ve işleyebilir belirteci, google senaryosundan birkaç şey simüle edebilirim. Ayrıca kullanıcı oturum açma düğmesinin tıklandığında i bir kerelik kodu edinme ediyorum, google senaryosunda ekstra loopback github test

app.post('/android/custom_login', function(req, res){ 
    var provider = 'google'; 
    var authSchema = 'oAuth 2.0'; 

    // oneTimeCode from android 
    var oneTimeCode = req.body.oneTimeCode; 

    // Make a request to google api 
    // to exchange refreshToken and accessToken with using google apis 
    var accessToken = 'FROM GOOGLE API'; 
    var refreshToken = 'FROM GOOGLE API'; 

    // external id is your google or facebook user id 
    var externalId = 'FROM GOOGLE API'; 
    var email = 'FROM GOOGLE API'; 

    var credentials = {}; 
    credentials.externalId = externalId; 
    credentials.refreshToken = refreshToken; 

    var profile = {}; 
    profile.id = externalId; 
    profile.emails = [{type:'account', value: email}]; 

    UserIdentityModel.login(
    provider, authSchema, profile, credentials , 
    {autoLogin:true}, function(err, loopbackUser, identity, token){ 
      if(err) throw err; 
      // token is access token for thig login 
      return res.send(token); 
    }); 
}); 

kontrol edebilirsiniz.Ardından erişim belirteci ve yenileme belirteci ile değiştirmek için sunucuma bir kerelik kod gönderdi. Ayrıca burada, google'dan kullanıcı profili bilgileri alıyorum. UserIdentityModel.login() yöntem sizin gibi, sen Android uygulamanız için bir erişim belirteci olacaktır Sonuçta sağlayıcı ve profile.id (bu Infos mevcut değilse)

kullanarak anonim bir kullanıcı oluşturduğundan

Profil ve sağlayıcı, gerçekten önemlidir aşağıdaki şekilde kodunu değiştirmek, server.js itibaren

0
  1. Kullanım Loopback-Passport example
  2. bkz

    app.get('/auth/account', ensureLoggedIn('/login'), function (req, res, next) { 
        res.json(req.accessToken); 
    
        }); 
    
  3. AccessToken'i yukarıdaki satırdan kullanarak, LoopBack API'lerini kullanabilirsiniz. Kendi özel API'lerinizi oluşturmak için kodu genişletebilirsiniz.