在Firebase身份验证系统中出错

时间:2020-06-07 12:06:38

标签: javascript node.js express firebase-authentication firebase-admin

当我两次登录时,我的主页本身就会调用两次或更多次,并出现一个错误。

将标头发送到客户端后无法设置标头 这是我的主要错误。每当我登录两次时,我都会收到此错误和我的

app.post('/main,function(req,res){
//called mant times 
})

然后没有 之后,我的应用程序崩溃了。

我也在redirect()部分中使用了return语句,然后我也遇到了这种错误,我花了很多时间解决它,但是什么也没发生。

   Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
        at ServerResponse.setHeader (_http_outgoing.js:541:11)
        at ServerResponse.header (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/response.js:771:10)
        at ServerResponse.send (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/response.js:170:12)
        at done (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/response.js:1008:10)
        at tryHandleCache (/home/iiitk/Desktop/circuito Clone/node_modules/ejs/lib/ejs.js:260:5)
        at View.exports.renderFile [as engine] (/home/iiitk/Desktop/circuito Clone/node_modules/ejs/lib/ejs.js:485:10)
        at View.render (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/view.js:135:8)
        at tryRender (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/application.js:640:10)
        at Function.render (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/application.js:592:3)
        at ServerResponse.render (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/response.js:1012:7)


Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:541:11)
    at ServerResponse.header (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/response.js:771:10)
    at ServerResponse.send (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/response.js:170:12)
    at done (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/response.js:1008:10)
    at tryHandleCache (/home/iiitk/Desktop/circuito Clone/node_modules/ejs/lib/ejs.js:260:5)
    at View.exports.renderFile [as engine] (/home/iiitk/Desktop/circuito Clone/node_modules/ejs/lib/ejs.js:485:10)
    at View.render (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/view.js:135:8)
    at tryRender (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/application.js:640:10)
    at Function.render (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/application.js:592:3)
    at ServerResponse.render (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/response.js:1012:7)
[2020-06-07T08:02:57.908Z]  @firebase/database: FIREBASE WARNING: Exception was thrown by user callback. TypeError: req.next is not a function
    at done (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/response.js:1007:25)
    at tryRender (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/application.js:642:5)
    at Function.render (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/application.js:592:3)
    at ServerResponse.render (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/response.js:1012:7)
    at /home/iiitk/Desktop/circuito Clone/src/index.js:174:28
    at /home/iiitk/Desktop/circuito Clone/node_modules/@firebase/database/dist/index.node.cjs.js:4550:22
    at exceptionGuard (/home/iiitk/Desktop/circuito Clone/node_modules/@firebase/database/dist/index.node.cjs.js:698:9)
    at EventList.raise (/home/iiitk/Desktop/circuito Clone/node_modules/@firebase/database/dist/index.node.cjs.js:9685:17)
    at EventQueue.raiseQueuedEventsMatchingPredicate_ (/home/iiitk/Desktop/circuito Clone/node_modules/@firebase/database/dist/index.node.cjs.js:9639:41)
    at EventQueue.raiseEventsAtPath (/home/iiitk/Desktop/circuito Clone/node_modules/@firebase/database/dist/index.node.cjs.js:9608:14) 
/home/iiitk/Desktop/circuito Clone/node_modules/@firebase/database/dist/index.node.cjs.js:709
            throw e;
            ^

TypeError: req.next is not a function
    at done (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/response.js:1007:25)
    at tryRender (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/application.js:642:5)
    at Function.render (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/application.js:592:3)
    at ServerResponse.render (/home/iiitk/Desktop/circuito Clone/node_modules/express/lib/response.js:1012:7)
    at /home/iiitk/Desktop/circuito Clone/src/index.js:174:28
    at /home/iiitk/Desktop/circuito Clone/node_modules/@firebase/database/dist/index.node.cjs.js:4550:22
    at exceptionGuard (/home/iiitk/Desktop/circuito Clone/node_modules/@firebase/database/dist/index.node.cjs.js:698:9)
    at EventList.raise (/home/iiitk/Desktop/circuito Clone/node_modules/@firebase/database/dist/index.node.cjs.js:9685:17)
    at EventQueue.raiseQueuedEventsMatchingPredicate_ (/home/iiitk/Desktop/circuito Clone/node_modules/@firebase/database/dist/index.node.cjs.js:9639:41)
    at EventQueue.raiseEventsAtPath (/home/iiitk/Desktop/circuito Clone/node_modules/@firebase/database/dist/index.node.cjs.js:9608:14)
[nodemon] app crashed - waiting for file changes before starting...

我的代码

var alert = require('alert-node');
const path = require('path');
const express = require('express');
const ejs = require('ejs');
const bodyParser = require('body-parser');
const csrf = require('csurf');
const cookieParser = require("cookie-parser");
const port = process.env.PORT || 5000;
var parser = bodyParser.urlencoded({ extended: false });


const admin = require('firebase-admin');

const firebase = require('firebase');

const serviceAccount = require("./serviceAccountKey.json");

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

var firebaseConfig = {
    apiKey: "",
    authDomain: "",
    databaseURL: "",
    projectId: "",
    storageBucket: "",
    messagingSenderId: "",
    appId: "",
    measurementId: ""
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
firebase.auth().setPersistence(firebase.auth.Auth.Persistence.NONE);
const publicDirPath = path.join(__dirname, '../public');

const csrfMiddleware = csrf({ cookie: true });
const app = express();

app.set('views', path.join(__dirname, '../views'));
app.set('view engine', 'ejs');
app.use(express.static(publicDirPath));

app.use(bodyParser.json());


// process.on('unhandledRejection', (reason, p) => {
//     console.log('Unhandled Rejection at: ', p, 'reason:', reason);
//     // application specific logging, throwing an error, or other logic here
// });

app.get('/', function(req, res) {

    res.render('signup');
})
app.post('/', parser, function(req, res) {
    console.log(req.body);
    name = req.body.username;
    password = req.body.password;
    email = req.body.login;


    check_sign(email, password, function(result) {
        if (result == true)
            return res.redirect("/");
        else
            return res.redirect('/login');

    })

})

app.get('/login', (req, res) => {
    console.log("kunaldk");
    return res.render('login')
})

app.post('/login', parser, (req, res) => {
    email = req.body.login;
    password = req.body.password;

    login_check(email, password, function(result) {
        if (result == true)
            return res.redirect(307, "/main");
        else
            return res.status(204).send();
    });


})



app.post('/profile', (req, res) => {

    firebase.auth().onAuthStateChanged(function(user) {
        if (user) {
            // console.log(user.uid)
            var userid = firebase.auth().currentUser.uid;
            console.log(userid);
            firebase.database().ref(userid).on('value', (function(data, err) {

                console.log(data.val().Email);
                //p = data.val().Email;
                return res.render('profile', { Data: data.val() });

            }));

        }
    });



})


app.post('/main', (req, res) => {
    var userid;


    main_fn(res, req, function(result) {
        console.log(result);
    })

})
app.post('/logout', async function(req, res, next) {
    firebase.auth().signOut();
    return res.redirect('/')

    // await firebase.auth().signOut().then((d) => {
    //     return res.redirect('/login');

    // });



})


function login_check(email, password, callback) {
    admin.auth().getUserByEmail(email).then(user => {
        firebase.auth().signInWithEmailAndPassword(email, password).then(cred => {
            console.log("cd");

            callback(true);

        }).catch(err => {
            if (err.code == 'auth/wrong-password') {
                alert("Email / password not Exist");
                callback(false);

            }
        })

    }).catch(err => {
        if (err.code === 'auth/user-not-found') {

            alert("Email / password not Exist");
            callback(false);
        }
    })

}

function main_fn(res, req) {
    firebase.auth().onAuthStateChanged(function(user) {
        if (user) {
            userid = firebase.auth().currentUser.uid;
            console.log(userid);
            firebase.database().ref(userid).on('value', (function(data, err) {

                console.log(data.val().Email);
                return res.render('index', { p: data.val().Username });
                //res.render('index');
            }));
        }
    });
}

function check_sign(email, password, callback) {
    admin.auth().getUserByEmail(email).then(user => {
        alert("Email Alredy exist");
        callback(true);

    }).catch(err => {
        if (err.code === 'auth/wrong-password') {
            console.log("signup");
            firebase.auth().createUserWithEmailAndPassword(email, password).then(cred => {
                firebase.database().ref(cred.user.uid).set({
                    Username: req.body.username,
                    Name: req.body.name,
                    Phone: req.body.phone,
                    Email: req.body.login,
                    Gender: req.body.gender
                });
            });

            alert("Sign up Successfully");
            callback(false);

        }
    })
}

app.listen(port, () => {
    console.log(`Server is up and running on port ${port}`);

0 个答案:

没有答案