Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const User = require('../models/auth.model')
- const expressJwt = require('express-jwt')
- const _ = require('lodash');
- const {OAuth2Client} = require('google-auth-library')
- const fetch = import('node-fetch')
- const {validationResult} = require('express-validator')
- const jwt = require('jsonwebtoken')
- //custom error handler to get useful error from database errors
- const {errorHandler} = require ('../helpers/dbErrorHandling')
- //I will use nodemailer for send email
- const nodemailer = require('nodemailer')
- const transporter = nodemailer.createTransport({
- service: "hotmail",
- auth : {
- user: mail,
- pass: password
- }
- })
- exports.registerController = (req,res) => {
- const{name , email , password} = req.body
- //Extracts the validation errors from a request and makes them available in a Result object.
- const errors = validationResult(req);
- if (!errors.isEmpty()) {
- const firstError = errors.array().map(error => error.msg)[0]
- return res.status(422).json({
- error: firstError
- })
- }
- else{
- User.findOne({
- email
- }).exec((err , user) => {
- //If user exists
- if(user) {
- return res.status(400).json({
- error: "Email is taken"
- })
- }
- })
- //Generate Token
- const token = jwt.sign({
- name,
- email,
- password
- },
- process.env.JWT_ACCOUNT_ACTIVATION,
- {
- expiresIn: '15min'
- }
- )
- const emailData = {
- from: process.env.EMAIL_FROM,
- to : to,
- subject: "Account activation link",
- hmtl: `
- <h1>Please Click on link to activate </h1>
- <p>${process.env.CLIENT_URL}/activate/${token}</p>
- <hr/>
- <p>This email contain sensitive info</p>
- <p>${process.env.CLIENT_URL}
- `
- }
- transporter.sendMail(options , function(err,info) {
- if(err){
- console.log(err)
- return;
- }
- console.log("Sent: " + info.response)
- })
- }
- }
- //Activation and save to database
- exports.activationController = (req,res) => {
- const {token} = req.body
- if(token){
- //Verify the token is valid or not or expired
- jwt.verify(token , process.env.JWT_ACCOUNT_ACTIVATION ,
- (err , decoded) => {
- if(err){
- return res.status(401).json({
- error: "Expired Token , Signup again"
- })
- }
- else{
- //if valid save to database
- //Get name email password from token
- const {name , email , password} = jwt.decode(token)
- const user = new User({
- name ,
- email ,
- passsword
- })
- user.save((err,user) => {
- if(err){
- return res.status(401).json({
- error: errorHandler(err)
- })
- }
- else{
- return res.json({
- success: true ,
- message: "Signup successful",
- user
- })
- }
- })
- }
- })
- }
- else{
- return res.json({
- message: "error happening please try again"
- })
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment