Everyauth:将GitHub身份验证与数据库进行比对

4

我对node.js还比较陌生,使用everyAuth模块时遇到了问题。

我的问题是,我想创建一个应用程序,让用户通过github oauth登录,并检查用户是否在数据库的白名单中。我希望在检查用户是否在白名单中之前,能够阻止身份验证返回true。我尝试了几种方法,但都没有成功。

有人可以帮忙解决吗?

调用github方法

everyauth.github
  .appId(conf.github.appId)
  .appSecret(conf.github.appSecret)
  .redirectPath('/')
  .findOrCreateUser (sess, accessToken, accessTokenExtra, ghUser) ->
      promise = this.Promise()
      users.findOrCreateByGhData ghUser, accessToken, accessTokenExtra, promise
      promise;

User class

conf =      require '../config'
# Mongoose
mongoose =  require 'mongoose'
Schema =    mongoose.Schema
ObjectId =  Schema.ObjectId

# Connect
mongoose.connect('mongodb://' + conf.db.user + ':' + conf.db.password + '@' +  conf.db.url )

# User Schema
NewUser = new Schema 
    id :
        type: Number
        min: 18
        index: true
    login  :
        type: String
    ghId :
        type: Number
        unique: true
    date :
        type: Date
        default: Date.now

# Create Model
User = mongoose.model 'NewUser', NewUser

exports.findOrCreateByGhData = ( ghData , accessToken, accessTokenExtra, promise ) ->
    User.find  'ghId': ghData.id , (err, docs) ->
        if docs.length
            console.log '=========User==============='
            console.log docs
            return promise.fulfill ['Nah its an error']
        else
            console.log '=========No user============='
            user = new User()
            user.login = ghData.login
            user.ghId = ghData.id
            user.save ( err ) ->
                if err
                    throw err
                console.log 'saved'
            promise.fulfill user

“用户在白名单中”是什么意思? - alessioalex
2个回答

1

一开始我在使用Everyauth时遇到了一些问题,所以我转而使用Passport。它也有一个GitHub认证的模块。在我看来,它更加简单易用。Passport提供了用户资料,你只需要将其存储在数据库中,在成功认证后就可以获取。


0

promise.fail 是你正在寻找的吗?

function (session, accessToken, extra, user) {
  var promise = this.Promise();
  doSomethingAsync(function (err, user) {
    if (user.whitelisted) promise.fulfill(user);
    else promise.fail('denied');
  });
  return promise;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接