2017-03-22 10 views
1

私はユーザー認証を実装しようとしています。私のサーバーでは、ログインのために以下の処理を行っています。"正しい"方法でユーザーを認証する - dbからユーザーパスワードにアクセスする必要はありますか?

リクエストのメールアドレス/パスワードからユーザーのメールアドレス/パスワードを問い合わせます。私はbcryptのを通してそれを実行した後にパスワードを保存してい

enter image description here

:だから、私の選択クエリは、私のようなものを返します。今、req.bodyからのユーザーのパスワードが "kittycats"の場合、req.body.passworddb.passwordの比較をbcryptの比較を使って行うべきですか?

私はこの種のものに慣れていないので、それが「良い習慣」とみなされているのか、それとも私がこれを完全に間違っているのか分かりません。

おかげ

+0

「bcryptのデコード」はありません.bcryptは_ハッシング関数です。 – CBroe

+0

入力をbcryptでハッシュし、結果をデータベースに格納されているものと比較します。 – Eamonn

+0

申し訳ありませんが、私はbcryptを比較しました。申し訳ありませんがまだ学習 – user1354934

答えて

0

はい比較関数は、格納されたハッシュとパスワードを確認することができます。実際に私はNode.jsのライブラリに慣れていないんだけど、私は、これはAPIドキュメントであると仮定します。

https://github.com/kelektiv/node.bcrypt.js#to-check-a-password

比較機能は、他のbcryptのライブラリのように動作し、それはからの塩とコスト要因を抽出し、パスワードから比較可能なハッシュを計算します。次に、格納されたハッシュと計算されたハッシュが同じかどうかをチェックします。

0

あなたが認証目的のためにpassport.jsにおける局所戦略を考案することができるpassport.js.

を使用してそれを達成することができます。 NPMパッケージが利用可能です。 passport-localでそれをチェックしてください。

質問から、SQLデータベースを使用しているようです。私はSQLデータベースを使ってパスポートをどのようにユーザに渡すべきかわかりません。 threadには、パスポートをSQLで使用する方法が記載されています。チェックアウトしてください。

私はどのようにmongooseでpassport.jsを使用するかを示すことができます。

//私のユーザモデル:

var mongoose = require('mongoose'); 
var passportLocalMongoose = require('passport-local-mongoose'); 
var Schema = mongoose.Schema; 

var userSchema = new Schema({ 
    username: String, 
    password: String 
}); 

userSchema.plugin(passportLocalMongoose); 

var User = mongoose.model('user', userSchema); 
module.exports = User; 

// app.js

var express = require('express'); 
var app = express(); 
var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 
var User = require('/path/to/user/model'); 

passport.use('user', new LocalStrategy(User.authenticate())); 
passport.serializeUser(User.serializeUser()); 
passport.deserializeUser(User.deserializeUser()); 

app.post('/register', function(req, res){ 
    User.register(new User({ 
     username: req.body.username 
     }), 
     req.body.password, 
     function(err, user) { 
      passport.authenticate('local')(req, res, function() { 
      return res.status(200).json({ 
       success: true, 
       message: 'Registration Successful!' 
      }); 
     }); 
    ); 
}); 

app.post('/login', function(req, res){ 
    passport.authenticate('user', function(err, user, info) { 
     if (err) { 
     //handle err 
     } 
     if (!user) { 
     //user not found 
     } 
     req.logIn(user, function(err) { 
     if (err) { 
      //handle err 
     } 

     //Login successful! 
     }); 
    })(req, res, next); 
}); 

でこれを追加するには、あなたはそれが役に立つことを願っ!

関連する問題