この記事では、一般的なアーキテクチャを使用して、平均スタックアプリケーション内のユーザー認証を調査します。Node.js、Express.js、およびMongoDBベースのREST APIと対話する角度のあるシングルページアプリ。 安全なユーザー管理の重要な側面については説明します
このプロセスには、いくつかの重要なポイントに対処する必要があります:
ユーザー登録。
データストレージ:
ハッシュされたパスワードを含むユーザーデータは、mongodbに居住しています。
crypto
が含まれます
home
登録
login プロファイル(ログインしたユーザーにのみアクセスできます)
/api/register
(post):ユーザー登録。/api/login
(post):ユーザーログイン。/api/profile/:USERID
(get):ユーザープロファイルの詳細(保護)を取得します。mongodbスキーマ(mongoose):
/api/models/users.js
の単純なユーザースキーマは、email
、name
、hash
、およびsalt
フィールドを定義します。 email
フィールドは一意です。
var userSchema = new mongoose.Schema({ email: { type: String, unique: true, required: true }, name: { type: String, required: true }, hash: String, salt: String });
パスワードハッシュと塩漬け:
setPassword
およびvalidPassword
メソッド、node.jsのcrypto
モジュールをレバレッジ、パスワードを直接保存せずに安全なパスワード管理を処理します。
userSchema.methods.setPassword = function(password) { this.salt = crypto.randomBytes(16).toString('hex'); this.hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64, 'sha512').toString('hex'); }; userSchema.methods.validPassword = function(password) { var hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64, 'sha512').toString('hex'); return this.hash === hash; };
jwt生成:
generateJwt
メソッドは、
userSchema.methods.generateJwt = function() { var expiry = new Date(); expiry.setDate(expiry.getDate() + 7); return jwt.sign({ _id: this._id, email: this.email, name: this.name, exp: parseInt(expiry.getTime() / 1000), }, "MY_SECRET"); };
Passport.jsは、Expressの認証を簡素化します。 ファイルは、ローカル戦略を定義します:
/api/config/passport.js
passport.use(new LocalStrategy({ usernameField: 'email' }, function(username, password, done) { User.findOne({ email: username }, function(err, user) { // ... (error handling and password verification logic) ... }); }));
ファイルは、
:を使用したJWT認証用のミドルウェアを含むAPIルートを定義します。
/api/routes/index.js
express-jwt
var auth = jwt({ secret: 'MY_SECRET', userProperty: 'payload' }); router.get('/profile', auth, ctrlProfile.profileRead);
Angular Service(
)
authentication.service.ts
角度のルートガード(
)はルートを保護し、ログインしたユーザーのみがアクセスできるようにします。
auth-guard.service.ts
/profile
結論:
この包括的なガイドの詳細は、平均スタックアプリケーションで安全な認証システムを構築します。 安全なパスワード処理とJWT管理に常に優先順位を付けることを忘れないでください。 提供された例は、あなた自身のプロジェクトで堅牢なユーザー認証を実装するための強固な基盤を提供します。
よくある質問(FAQS):(元のFAQはすでに非常に包括的でよく書かれています。この応答が過度に長くなるので、ここで繰り返しません。)
以上が平均スタックを使用したユーザー認証の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。