Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
const jwt=require('jsonwebtoken'); const bcrypt=require('bcrypt'); const {TOKEN_SECRET, COOKIE_NAME}= require('../config') const userService=require('../services/userService'); module.exports=()=> function(req, res, next){ if (parseToken(req,res)){ req.auth={ async register(username,password){ const token= await register(username, password); res.cookie(COOKIE_NAME, token) }, async login(username, password){ const token=await login(username, password); res.cookie(COOKIE_NAME,token); }, logout(){ res.clearCookie(COOKIE_NAME); } }; next(); } }; async function register(username, password){ //adapt params and validate const existing=await userService.getUserByUsername(username); if (existing){ throw new Error ('Username is taken!'); } const hashedPassword=await bcrypt.hash(password, 10); const user=await userService.createUser(username, hashedPassword); //logi user return generateToken(user); } async function login(username,password){ const user=await userService.getUserByUsername(username); console.log(user) if (!user){ throw new Error ('No such user'); } const hasMatch=await bcrypt.compare(password, user.hashedPassword); console.log(password, user.hashedPassword) if (!hasMatch){ throw new Error ('Incorrect password!') } return generateToken(user); } function generateToken(userData){ return jwt.sign({ _id:userData._id, username:userData.username }, TOKEN_SECRET); } function parseToken(req,res){ const token=req.cookies[COOKIE_NAME]; if (token){ try { const userData=jwt.verify(token, TOKEN_SECRET); req.user=userData; } catch (err) { res.clearCookie(COOKIE_NAME); res.redirect('/auth/login'); return false; } } return true; }
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)