Как аутентифицировать пользователя в корпоративном аккаунте в Google? - PullRequest
0 голосов
/ 14 апреля 2020

Я создаю третий сервер для аутентификации пользователей с корпоративными аккаунтами в действии Google. Я использую связывание аккаунта с OAuth, тип связывания: неявный. Я использовал ngrok.io для сборки.

auth. js:

const jwtHelper = require("../helpers/jwt.helper");

const accessTokenSecret = process.env.ACCESS_TOKEN_SECRET || "xxx";

let auth = async (req, res) => {
  try {
    const userFakeData = {
      email: req.body.email,
    };

    const accessToken = await jwtHelper.generateToken(userFakeData, accessTokenSecret);

   return res.status(200).json({"token_type": "Bearer", accessToke);
  } catch (error) {
    return res.status(500).json(error);
  }
}

login. html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Login Form Tutorial</title>
    </head>
    <body>
        <div class="login-form">
            <h1>Login Form</h1>
            <form action="login" method="POST">
                <input type="text" name="email" placeholder="email" required>
                <input type="submit">
            </form>
        </div>
    </body>
</html>

jwt.helper. js

const jwt = require("jsonwebtoken");

let generateToken = (user, secretSignature, tokenLife) => {
  return new Promise((resolve, reject) => {
    const userData = {
      email: user.email,
    }
    jwt.sign(
      {data: userData},
      secretSignature,
      {
        algorithm: "HS256",
        expiresIn: tokenLife,
      },
      (error, token) => {
        if (error) {
          return reject(error);
        }
        resolve(token);
    });
  });
}

let verifyToken = (token, secretKey) => {
  return new Promise((resolve, reject) => {
    jwt.verify(token, secretKey, (error, decoded) => {
      if (error) {
        return reject(error);
      }
      resolve(decoded);
    });
  });
}

module.exports = {
  generateToken: generateToken,
  verifyToken: verifyToken,
};

middelware auth. js:

const jwtHelper = require('../helpers/jwt.helper');

const accessTokenSecret = process.env.ACCESS_TOKEN_SECRET || "xxx";

let isAuth = async(req, res, next) =>{
  const tokenFromCLient = req.body.token || req.query.token || req.headers["access-token"];
  if ( tokenFromCLient) {
    //thuc hien giai ma xem co hop len khong
    try{
      const decode = await jwtHelper.verifyToken(tokenFromCLient, accessTokenSecret);
      req.jwtDecoded = decode;
      next();
    }
    catch (error) {
      return res.status(401).json({ message: Unauthorized})
    }
  }
  else {
    return res.status(403).send({message: 'No token provided'})
  }
}

module.exports = {
  isAuth: isAuth
}

маршрутизатор. js

const express = require("express");
const router = express.Router();
const AuthMiddleWare = require("../middleware/auth");
const AuthController = require("../controllers/AuthController");

let initAPIs = (app) => {
  router.post("/auth", AuthController.login);

  router.use(AuthMiddleWare.isAuth);
 return app.use("/", router);

}

module.exports = initAPIs;

сервер. js

const express = require("express");
const app = express();
const initAPIs = require("./routes/router");
var bodyParser = require('body-parser');
var path = require('path');

app.use(bodyParser.urlencoded({extended : true}));
app.use(bodyParser.json());
app.get('/', function(request, response) {
  response.sendFile(path.join(__dirname + '/public/login.html'));
});
initAPIs(app);

app.listen(2310, () => {
  console.log("server is working in localhost:2310")
})

Настройка привязки моей учетной записи enter image description here

Мои учетные данные Google Cloud: enter image description here

Вот что произошло, когда я "общаюсь с забавным приложением" enter image description here После отправить форму: enter image description here Нажмите ссылку: enter image description here Нажмите ссылку: enter image description here Ничего не произошло в консоли Google enter image description here

...