如何在服务器端检查用户身份验证状态

时间:2019-02-20 13:17:07

标签: javascript html express firebase-authentication

我想在显示html页面之前检查用户身份验证

我的server.js文件就是这样

const express = require('express');
var jquery = require('jquery');
var admin = require("firebase");

const app = express();

app.use(express.static(__dirname + '/public'));



var serviceAccount = require("firebasekey.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://23442344114.firebaseio.com"
});

var ref = admin.app().database().ref();
 

app.get(['/','/index.html'], function(req, res) {
	res.sendFile(__dirname + '/public/index.html');
 
 });


app.get(['/dash' ], function(req, res) {
	res.sendFile(__dirname + '/public/dash/index.html');
  
 });
 
 

如何在呈现页面之前先在服务器端检查用户是否已通过身份验证;例如

 app.get(['/dash' ], function(req, res) {
      //check if the user is authenticated

     if auth == true {
    res.sendFile(__dirname + '/public/dash/index.html');
     } else{
            res.sendFile(__dirname + '/public/login.html');

     }

 });

如何在服务器端检查用户身份验证状态?

2 个答案:

答案 0 :(得分:1)

您应该阅读有关JWT和OAuth之类的身份验证方法的信息。您可以使用中间件来检查特定用户是否已通过身份验证。你可以像护照这样的图书馆。您可以像这样创建自己的路由器级中间件。

let middleware = function (req, res, next) {
   //Do your checking...
   next();
};

app.get(['/dash' ],middleware, function(req, res) {
   //check if the user is authenticated

   if auth == true {
       res.sendFile(__dirname + '/public/dash/index.html');
   } else {
       res.sendFile(__dirname + '/public/login.html');
   }
});

答案 1 :(得分:1)

如建议的那样,有无数种验证用户身份的方法。 但我将通过一个简单的示例来帮助您:

  1. 您应该拥有永久的用户列表,例如数据库。为简单起见,我们将在您的代码中添加一个常量。
const express = require('express');
var jquery = require('jquery');
var admin = require("firebase");

const USER = {
    email: "john@doe.com",
    password: "12345"
}

  1. 有几种方法可以实现身份验证检查。我建议使用可应用于各种路由的中间件:
const authenticate = (req, res, next) => {
    // parse the user out of your request
    // e.g with bodyparser -> see npm
    if (req.body.email === USER.email && req.body.password === USER.password) {
        next()
    } else {
        res.send({ status: 401 });
    }
}

  1. 将此中间件应用于您要保护的路由或所有路由
// all routes
app.use(authenticate)

// certain route
app.get('/someRoute', authenticate, (req, res)) => {
    // only successful authenticated user
    // (in this case: john@doe.com) will
    // have access to this route.
    // ... code
}

此模式可以扩展为例如cookie,jwt,当然还可以扩展为可用于存储注册用户的数据库。