2016-11-14 1 views
0

私は自分のログイン機能をユーザ名/パスワードを確認するサービスに書きましたが、私はまだLoopBacksユーザモデルを使いたいと思います。問題は、accesstokenを取得することです(ユーザーはLBアプリケーション内にログインしたままにしておく必要があります)。パスワードを入力する必要があります。 Loopbacksデータソースにパスワードを格納することはオプションではありません。私の質問、どのように私は実際に検証され、パスワードなしでログインすることができますユーザーをループバックに言うのですか?私がUser.Loginコードで見ることのできるところから、パスワードをスキップしてユーザにログインするオプションはありません。ユーザログイン時にパスワードをスキップ

これはすべてプログラマチックに行われています。ユーザーモデルをベースにしたカスタムユーザーモデルを使用しています。以下は簡単な例です:

CustomUser.beforeRemote('login', function(ctx, unused, next) { 
    UserService.externalLogin(ctx.args.credentials.username ,ctx.args.credentials.password).then(function(response){ 
     //Go to user.login 
     if(response.authorized){ 
     next(); 
     } 
    }); 
    }); 

答えて

2

これがベストプラクティスですが、私は実際にcustom-user.js用カスタムログインエントリー・ポイントを追加するかどうかわからない:

CustomUser.customLogin = function (email, cb) { 
     var tokenTimeToLive = 12096000; //in ms 
     CustomUser.findOne({ 
      where: {email: email} 
     }, function (err, user) { 
      if (err) { 
       return cb(err, null); 
      } else { 
       if (user) { 
        user.createAccessToken(tokenTimeToLive, function (error, token) { 
         return cb(error, token); 
        }); 
       } else { 
        return cb(new Error("No User found"), null); 
       } 
      } 
     }); 
    }; 

    CustomUser.remoteMethod('customLogin', { 
     accepts: {arg: 'email', type: 'string', required: true}, 
     returns: {arg: 'credentials', type: 'object', root: true}, 
     description: "Custom login entry" 
    }); 

そして、この方法のためのカスタムACLをあなたのcustom-user.jsonに:もちろん

... 
"acls": [ 
    { 
     "accessType": "*", 
     "principalType": "ROLE", 
     "principalId": "$everyone", 
     "permission": "DENY" 
    }, 
    { 
     "accessType": "READ", 
     "principalType": "ROLE", 
     "principalId": "$authenticated", 
     "permission": "ALLOW" 
    }, 
    { 
     "accessType": "WRITE", 
     "principalType": "ROLE", 
     "principalId": "$authenticated", 
     "permission": "ALLOW" 
    }, 
    { 
     "principalType": "ROLE", 
     "principalId": "$everyone", 
     "permission": "ALLOW", 
     "property": "customLogin" 
    } 
    ] 
... 

あなたはemailものよりも、別のフィールドを使用する場合がありますが、私はそれはまた、主キーだと思いますループバックUserモデル。 しかし、新しいパスワードを投稿するときには、常にユーザのためにプログラムで生成されたパスワードを投稿する必要があります。

+1

解決策F3L1X79のおかげで、私は生成トークン部分を回避したいと考えていました。私が結んだのは、これを混ぜたものですが、ユーザーが権限を持っている場合にトークンを生成するlogin-functionを使用しています。 :) – Undrium

関連する問題