プレーンイングリッシュ
27401 ワード
TLR Webトークンのインストール 必要 生成トークン JSONウェブトークンに署名する 郵便番号、データベース、およびjwt.io ロジックを保護して作成するルートを構築する 現在のユーザーのトークンを確認するミドルウェアを作成する 保護する目的のルートへのミドルウェアを置く
ユーザーを認証して、情報を共有することによって保護されたルートにアクセスする安全な方法.
発行者は秘密を使用してJWTに署名します.受信機は、発行者が署名した後にトークンが変更されていないことを確認するために署名を検証します.
私は、ユーザーが既に存在するならば、新しいユーザまたはログインとしてユーザー登録をするMern(MongoDB、Express、Response、Node)アプリを構築しています.ユーザーの情報は、バックエンド上のExpressとNodeを介してMongoDBデータベースに格納されます.私は、関心の分離のためのMVCモデルを利用していますMVC .
バージョン ノードV 16.13.1 bcryptjs v ^ 2.4.3 エクスプレスv ^ 4.17.3 エクスプレスasyncハンドラv ^ 1.2.0 jsonwebtoken v ^ 8.5.1 マングースv 6.6.10 このデモでさらにドリルダウンするだけでフォーカスする必要があります
ビューとしても知られるクライアント
あなたのCLIランで
コントローラのフォルダで、ユーザーのルートロジックを使用してファイルを開きます.私は鉱山を訪れた
トークンを生成し、ユーザーIDを渡します.標識法
を返します.singメソッドは3つの引数を取ります ユーザID、オブジェクト 秘密にすることができます. 有効期限、オプションオブジェクト
一緒に置く
トークンはユーザIDで生成する必要があります
確認確認
私はデータベースからテストユーザを削除し、新しいユーザを登録して、Postmanを使って手動で証明したhttp://localhost:5000/api/users
トークンの中にユーザーIDがあります.手動で確認し、コピーし、あなたのトークンを貼り付けるjwt.io 左上のフィールドと右側にペイロードが表示されます
赤で囲まれたペイロードは、PostmanのCIRIDとデータベースのCHERIDに一致します.
今ではトークンを作成しました.保護されたルート機能は、いくつかの方法で達成できます.
ルートを構築して、ロジックをつくって、ミドルウェアをつくって、ミドルウェアを保護するルートに持ってきてください. ビルドしたいルートをビルド
このようなコントローラのgetUserロジックを作成します
ミドルウェアを追加する
最後にプロテクト機能ミドルウェアを
あなたの時間をありがとう.畝
json web token
jwt.io
MVC
Postman
Express-Async-Handler
bcryptjs
MongoDB
Node
Portfolio
Github
npm i jsonwebtoken
JSONウェブトークンとは
ユーザーを認証して、情報を共有することによって保護されたルートにアクセスする安全な方法.
発行者は秘密を使用してJWTに署名します.受信機は、発行者が署名した後にトークンが変更されていないことを確認するために署名を検証します.
文脈
私は、ユーザーが既に存在するならば、新しいユーザまたはログインとしてユーザー登録をするMern(MongoDB、Express、Response、Node)アプリを構築しています.ユーザーの情報は、バックエンド上のExpressとNodeを介してMongoDBデータベースに格納されます.私は、関心の分離のためのMVCモデルを利用していますMVC .
バージョン
userController.js
, authMiddleware.js
, and userRoutes.js
以下のファイル構造を参照ください.ビューとしても知られるクライアント
client
backend
|config
|-controller
|-userController.js
|-middleware
|-authMiddleware.js
|models
|-routes
|-userRoutes.js
|server
.env
.gitignore
package-lock.json
package.json
データベースにユーザーを作成したら、パスワードとメールで一般的にログインする必要があります.私の使用bcryptjs 私のユーザのパスワードを平文パスワードからハッシュされたパスワードにし、Postman とデータベースMongoDB . これでJSON Webトークンを作成する準備ができました.JSON Webトークンを設定する
ステップ1
インストール
あなたのCLIランで
npm i jsonwebtoken
それがあなたのパッケージにあるかどうかチェックしてください.JSON"jsonwebtoken": "^8.5.1"
ステップ2
必要
コントローラのフォルダで、ユーザーのルートロジックを使用してファイルを開きます.私は鉱山を訪れた
userController.js
もたらすconst jwt = require ('jsonwebtoken')
マイコードを参照してください「バックエンド」コントローラ。js
userContoller.js
// Simple middleware for handling exceptions inside of async express routes and passing them to your express error handlers. Need to wrap entire function
const asyncHandler = require('express-async-handler');
// Use bcrypt to hash the password
const bcrypt = require('bcryptjs');
// Bring in the user model
const User = require('../models/userModel');
// Bring in jsonwebtoken
const jwt = require ('jsonwebtoken')
ステップ3
トークンを生成する
トークンを生成し、ユーザーIDを渡します.標識法
userContoller.js
const generateToken = (id)=> {
return jwt.sign({})
}
ステップ4
トークンに署名する
を返します.singメソッドは3つの引数を取ります
userContoller.js
const generateToken = (id)=> {
return jwt.sign({id},process.env.JWT_SECRET,{expiresIn:'4d'})
}
ステップ5
一緒に置く
トークンはユーザIDで生成する必要があります
user._id
署名しなければなりません.レジスターとログインルートで、Aがありますres.json({})
それが返され、オブジェクトにあるtoken:generateToken(user._id)
「バックエンド」コントローラ。js
userContoller.js
const registerUser=()=> {
code logic...
res.status(200).json({
// user in mongodb stores id as _id
_id: user._id,
name: user.name,
email: user.email,
token:generateToken(user._id)
});
}
const loginUser=()=> {
code logic...
res.status(200).json({
// user in mongodb stores id as _id
_id: user._id,
name: user.name,
email: user.email,
token:generateToken(user._id)
});
}
生成関数バックエンド>コントローラ
userContoller.js
// GENERATE TOKEN
const generateToken = (id) => {
return jwt.sign({ id }, process.env.JWT_SECRET, {
expiresIn: '4d'
});
};
ステップ6
確認確認
私はデータベースからテストユーザを削除し、新しいユーザを登録して、Postmanを使って手動で証明したhttp://localhost:5000/api/users
トークンの中にユーザーIDがあります.手動で確認し、コピーし、あなたのトークンを貼り付けるjwt.io 左上のフィールドと右側にペイロードが表示されます
赤で囲まれたペイロードは、PostmanのCIRIDとデータベースのCHERIDに一致します.
ハーフウェイホーム
今ではトークンを作成しました.保護されたルート機能は、いくつかの方法で達成できます.
ルートを構築して、ロジックをつくって、ミドルウェアをつくって、ミドルウェアを保護するルートに持ってきてください.
router.get('/me', getUser);
ルートフォルダでuserRoutes.js
, 後でこのファイルに戻ってミドルウェアを追加します.バックエンド>ルート>ユーザルート。js
userRoutes.js
const express = require('express');
const router = express.Router();
// bring logic from the controllers folder
const { registerUser, loginUser, getUser } = require('../controllers/userController');
// example: router.method(path, logic)
router.post('/', registerUser);
router.get('/login', loginUser);
// protected route, will add protect middleware last
router.get('/me', getUser);
module.exports = router;
「バックエンド」コントローラ。js
userController.js
const asyncHandler = require('express-async-handler');
const bcrypt = require('bcryptjs');
const User = require('../models/userModel');
const jwt = require('jsonwebtoken');
const registerUser=()=> {
code logic...
}
const loginUser=()=> {
code logic...
}
const getUser = asyncHandler(async (req, res) => {
const user = {
id: req.user._id,
email: req.user.email,
name: req.user.name
};
res.status(200).json(user);
});
const generateToken = (id) => {
return jwt.sign({ id }, process.env.JWT_SECRET, {
expiresIn: '4d'
});
};
module.exports = {
loginUser,
registerUser,
getUser
};
authMiddleware.js
関数と共にprotect
トークンを確認するには、ヘッダに渡され、トークンの特定のユーザー情報だけを返します.ミドルウェア>オーサミドルウェア.js
authMiddleware.js
// *MIDDLEWARE FOR PROTECTED ROUTES
const jwt = require('jsonwebtoken');
const asyncHandler= require('express-async-handler');
const User = require('../models/userModel');
const protect= asyncHandler(async(req, res, next)=> {
let token;
// Bearer token
// Check for token in the headers for authorization and Bearer token
if(req.headers.authorization && req.headers.authorization.startsWith('Bearer')){
try {
// Get the token from the header
// it comes back as "Bearer token" must split at space
// split will return[Bearer token] and need the second item
token= req.headers.authorization.split(' ')[1]
// Verify the token value has not changed and the secret is the same
const decoded = jwt.verify(token, process.env.JWT_SECRET)
// Return the user from the user id in the token minus the password
req.user =await User.findById(decoded.id).select('-password');
next()
} catch (error) {
console.log(error);
res.status(401)
throw new Error('Not Authorized')
}
}
// If there is no token in the first place
if(!token){
res.status(401)
throw new Error('Not Authorized')
}
})
module.exports = {protect}
userRoutes.js
. バックエンド>ルート>ユーザルート。js
userRoutes.js
const express = require('express');
const router = express.Router();
// Bring logic from the controllers folder
const { registerUser, loginUser, getUser } = require('../controllers/userController');
// Bring in middleware to protect routes
const {protect}= require('../middleware/authMiddleware');
// example: router.method(path, logic)
router.post('/', registerUser);
router.get('/login', loginUser);
// protected route
router.get('/me',protect, getUser);
module.exports = router;
最後に保護されていることを確認する郵便局を介して保護されたルートをチェックします.Authタブを使用し、ログインルートからトークンをペーストしますここで終わりです。
あなたの時間をありがとう.畝
ハッピーコーディング!
リンク🔗
json web token
jwt.io
MVC
Postman
Express-Async-Handler
bcryptjs
MongoDB
Node
社会❤️
Portfolio
Github
Reference
この問題について(プレーンイングリッシュ), 我々は、より多くの情報をここで見つけました https://dev.to/gregpetropoulos/jwt-in-plain-english-2hfiテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol