2016-01-30 36 views
5

Birkaç hafta önce Sails ile çalışıyorum, Rails'den geldim ve Node.js. ile çalışma tecrübem yok.Geçerli kullanıcı Sails.js'de jsonwebtoken'i nasıl kullanabilirim?

Şimdi jsonwebtoken kullanarak sağlam bir belirteç kimlik doğrulaması yapmaya çalışıyorum. https://github.com/auth0/node-jsonwebtoken

Bu kılavuzu http://thesabbir.com/how-to-use-json-web-token-authentication-with-sails-js/ izledim ve her şey yolunda gitti. Giriş yapamıyorum, giriş yaptıktan sonra farklı eylemler için belirteci doğru kullanabiliyorum.

Şimdi, oturum açma kullanıcısını kullanmak istediğim bazı eylemler var, devise current_user yardımcısı gibi bir şey. Örneğin, bir yorum oluştururken, bu yorum mevcut kullanıcıya ait olmalıdır.

Sabbir Ahmed kılavuzunu kullanarak, isAuthorized.js politikasından 33 satırda, jetonun şifresi çözülür böylece geçerli kullanıcı kimliğini oradan alabilirim.

Yani, sorum şu ki, mevcut kullanıcıyı edinmenin ve daha sonra bazı denetleyicide kullanmanın en iyi yolu ne olmalı? Bu bir zaman uyumsuz eylemdir çünkü bir denetleyici bu CurrentUser kullanamaz, bu yolda,

# isAuthorized.js line 34, after getting decrypted token 
User.findOne({id: token.id}).exec(function findOneCB(err, found){ 
    currentUser = found; 
}); 

Ama: Örneğin ben şöyle bir şey denedik.

Geçerli denetleyicide, daha sonra bazı denetleyicide her bir denetleyicide aynı kodu tekrar etmeden kullanabilmeniz için, bir yardımcı veya bir hizmet gibi bir şeyi saklamak istiyorum.

cevap

4

next()'u yerleştirdiğiniz yer budur. Zaman uyumsuz çağrı yaptığınız için, kontrol, veritabanı eylemi bir kez yarıştığında yalnızca bir sonraki politikaya/denetleyiciye aktarılmalıdır.

Sen hiç politikasını değiştirmesi gerektiğini:

User.findOne({id: token.id}).exec(function findOneCB(err, found){ 
    if(err) next(err); 
    req.currentUser = found; 
    next(); 
}); 

Ve Örneğin req.currentUser

0

Eğer tarafından

aracılığıyla isAuthorized kullanımı politikasını kontrolörleri kullanıcı bilgilerini erişmek mümkün olmalıdır bir yorum oluştururken, bu yorum mevcut kullanıcıya ait olmalıdır. Ne demek istediğini

vb doğrulamadan sonra veritabanı sorgulama ziyade, ne yapmak seçebileceğiniz bazı kullanıcı adı gibi nitelikler ve ülke api/controllers/UsersController.js

yılında jwToken.issue için bu ek özelliklerini göndermektir

örn. O nasıl yardımcı olur?

jwToken.issue({ 
    id: user.id, 
    username: user.name, 
    country: user.country 
    }) 

sen Yerine zorunda

olarak
token.username or token.country 

gelen yük değerleri erişebilir olduğu gibi api/policies/isAuthorized.js tutmak ve gelecekte kullanmak bütün kontrolörlerin olabilir, olduğu veritabanını tekrar sorgulayın, böylece değerli yanıt süresini kaydedebilirsiniz.olarak yük şifresini çözmek için gerekli değildir gizli anahtar ve karma olarak ancak:

verilerin sen ({kullanıcı kullanıcı} isterseniz siz de gönderebilir) belirteçteki göndermeyi tercih Ancak dikkat @jwt.io rakamını belirleyebilirsiniz, kısıtlama yapmak isteyebilirsiniz.

İlgili konular