Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点+;中多个并发用户的会话管理;快递js_Javascript_Node.js_Express_Passport.js_Riot.js - Fatal编程技术网

Javascript 节点+;中多个并发用户的会话管理;快递js

Javascript 节点+;中多个并发用户的会话管理;快递js,javascript,node.js,express,passport.js,riot.js,Javascript,Node.js,Express,Passport.js,Riot.js,我尝试使用移动设备以管理员身份登录,成功登录后,我在响应头中设置cookie。同时,当我尝试从其他设备(笔记本电脑)访问路由时,我从其他设备获得所有管理员访问权限 如何为多个用户维护会话 还有一个问题是,我试图在全局对象中维护视图状态(基于用户是否登录的登录/注销按钮),这在服务器端渲染中会丢失 我的意思是所有JavaScript变量数据(在我的例子中是DataMixin对象)都丢失了 如何开发同构riotjs应用程序?请参阅reactJs中修复的类似问题: 状态: document.addEv

我尝试使用移动设备以管理员身份登录,成功登录后,我在响应头中设置cookie。同时,当我尝试从其他设备(笔记本电脑)访问路由时,我从其他设备获得所有管理员访问权限

如何为多个用户维护会话

还有一个问题是,我试图在全局对象中维护视图状态(基于用户是否登录的登录/注销按钮),这在服务器端渲染中会丢失

我的意思是所有JavaScript变量数据(在我的例子中是DataMixin对象)都丢失了

如何开发同构riotjs应用程序?请参阅reactJs中修复的类似问题:

状态:

document.addEventListener('DOMContentLoaded', function (e) {
    DataMixin = { //Global object

        setAuthentication: function(){
            if(arguments[0] != null){
                localStorage.setItem('role', arguments[0][0]);
                localStorage.setItem('loginStatus', arguments[0][1]);
            }
        },

        getRole: function(){
            return localStorage.getItem('role');
        },
    }
}
<a href="#" if="{DataMixin.getRole() == ROLE_USER}">ADMIN LOGIN</a>
<li if="{DataMixin.getRole() == 'ROLE_ADMIN'}">
    <a onclick="{logout}">LOGOUT</a>
</li>
function urlDataApiResponse(url, params, req, res) {
    swig = require('swig');
    var header_tag = require('./public_html/tags/header_tag.tag');
    var blog_post_details_tag = require('./public_html/tags/blog_post_details.tag');
    var footer_tag = require('./public_html/tags/footer_tag.tag');
    var blog_sidebar_tag = require('./public_html/tags/blog_sidebar.tag');
    var slide_menu_tag = require('./public_html/tags/slide_menu.tag');
    app.engine('html', swig.renderFile);
    app.set('view engine', 'html');
    app.set('views',__dirname + '/public_html/tags/');
    var postDetails = {};
    console.log('url inside getApiResponse ', url);
    var options = {
        method: 'GET',
        uri: url,
        qs: params,
        headers: {
            'User-Agent': 'Request-Promise'
        },
        json: true // Automatically parses the JSON string in the response
    };

    rp(options)
    .then(function (response) {
        createJWT(req,res);
        var postDetails, categories, blog_sidebar_tag_rendered, slide_menu_tag_rendered,
        header_tag_rendered, blog_tag_rendered, footer_tag_rendered;

    postDetails = (response[0].attributes);
    console.log('.............................................................');
    console.log('.............SERVER-SIDE-RENDERING:START.....................');
    console.log('.............................................................');


    header_tag_rendered = riot.render(header_tag, {role: storage.getItemSync('role'), loginStatus: storage.getItemSync('loginStatus') });
    slide_menu_tag_rendered = riot.render(slide_menu_tag, {role: storage.getItemSync('role'), loginStatus: storage.getItemSync('loginStatus') });
    blog_tag_rendered = riot.render(blog_post_details_tag, {details: postDetails, role: storage.getItemSync('role')});
    blog_sidebar_tag_rendered = riot.render(blog_sidebar_tag);
    footer_tag_rendered = riot.render(footer_tag);

    var meta_details = {
        postImageUrl: postDetails.userImage,
        title: postDetails.title + " - Rootscopeit.in",
        description: postDetails.details.substring(0,200)+"...",
        details: postDetails.details,
        url: postDetails.url
    };

    res.render('blog_post_details', {
        open_graph: meta_details,
        header_details: header_tag_rendered, 
        slide_details: slide_menu_tag_rendered, 
        article_details: blog_tag_rendered, 
        sidebar_details: blog_sidebar_tag_rendered, 
        footer_details: footer_tag_rendered});

    console.log('............................................................');
    console.log('............SERVER-SIDE-RENDERING:END.......................');
    console.log('............................................................');
    })
    .catch(function (err) {
        console.log('=================================');
        console.error('POST error ', err.stack);
        console.log('=================================');
        return res.status(res.statusCode).send(err);
    });
}
查看:

document.addEventListener('DOMContentLoaded', function (e) {
    DataMixin = { //Global object

        setAuthentication: function(){
            if(arguments[0] != null){
                localStorage.setItem('role', arguments[0][0]);
                localStorage.setItem('loginStatus', arguments[0][1]);
            }
        },

        getRole: function(){
            return localStorage.getItem('role');
        },
    }
}
<a href="#" if="{DataMixin.getRole() == ROLE_USER}">ADMIN LOGIN</a>
<li if="{DataMixin.getRole() == 'ROLE_ADMIN'}">
    <a onclick="{logout}">LOGOUT</a>
</li>
function urlDataApiResponse(url, params, req, res) {
    swig = require('swig');
    var header_tag = require('./public_html/tags/header_tag.tag');
    var blog_post_details_tag = require('./public_html/tags/blog_post_details.tag');
    var footer_tag = require('./public_html/tags/footer_tag.tag');
    var blog_sidebar_tag = require('./public_html/tags/blog_sidebar.tag');
    var slide_menu_tag = require('./public_html/tags/slide_menu.tag');
    app.engine('html', swig.renderFile);
    app.set('view engine', 'html');
    app.set('views',__dirname + '/public_html/tags/');
    var postDetails = {};
    console.log('url inside getApiResponse ', url);
    var options = {
        method: 'GET',
        uri: url,
        qs: params,
        headers: {
            'User-Agent': 'Request-Promise'
        },
        json: true // Automatically parses the JSON string in the response
    };

    rp(options)
    .then(function (response) {
        createJWT(req,res);
        var postDetails, categories, blog_sidebar_tag_rendered, slide_menu_tag_rendered,
        header_tag_rendered, blog_tag_rendered, footer_tag_rendered;

    postDetails = (response[0].attributes);
    console.log('.............................................................');
    console.log('.............SERVER-SIDE-RENDERING:START.....................');
    console.log('.............................................................');


    header_tag_rendered = riot.render(header_tag, {role: storage.getItemSync('role'), loginStatus: storage.getItemSync('loginStatus') });
    slide_menu_tag_rendered = riot.render(slide_menu_tag, {role: storage.getItemSync('role'), loginStatus: storage.getItemSync('loginStatus') });
    blog_tag_rendered = riot.render(blog_post_details_tag, {details: postDetails, role: storage.getItemSync('role')});
    blog_sidebar_tag_rendered = riot.render(blog_sidebar_tag);
    footer_tag_rendered = riot.render(footer_tag);

    var meta_details = {
        postImageUrl: postDetails.userImage,
        title: postDetails.title + " - Rootscopeit.in",
        description: postDetails.details.substring(0,200)+"...",
        details: postDetails.details,
        url: postDetails.url
    };

    res.render('blog_post_details', {
        open_graph: meta_details,
        header_details: header_tag_rendered, 
        slide_details: slide_menu_tag_rendered, 
        article_details: blog_tag_rendered, 
        sidebar_details: blog_sidebar_tag_rendered, 
        footer_details: footer_tag_rendered});

    console.log('............................................................');
    console.log('............SERVER-SIDE-RENDERING:END.......................');
    console.log('............................................................');
    })
    .catch(function (err) {
        console.log('=================================');
        console.error('POST error ', err.stack);
        console.log('=================================');
        return res.status(res.statusCode).send(err);
    });
}
在passport js中设置cookie:

//==============
//TOKEN CREATION
//==============
function createJWT(req, res){
    var claims = {
        sub: 'Social Authentication',
        iss: 'https://rootscopeit.in',
    };

    var jwt = nJwt.create(claims, secretKey);
    jwt.setExpiration(new Date().getTime() + (60 * 60 * 1000 * 1)); // One hour from now
    var token = jwt.compact();
    var cookies = new Cookies(req, res).set('access_token', token, {
        //httpOnly: true,
        //secure: true // for your production environment
    });
}

//=======================================
//===Google Authentication
//=======================================    
var passport = require('passport');
var GoogleStrategy = require('passport-google-oauth20').Strategy;
app.use(passport.initialize());
app.use(passport.session());

passport.serializeUser(function (user, done) {
    done(null, user);
});
passport.deserializeUser(function (obj, done) {
    var user = USERS[id];
    done(null, user);
});

app.get('/auth/google', passport.authenticate('google', 
{scope: ['profile', 'https://www.googleapis.com/auth/plus.login', 
        'https://www.googleapis.com/auth/plus.profile.emails.read',
    'https://www.googleapis.com/auth/blogger']}));
app.get('/auth/google/callback', passport.authenticate('google', {failureRedirect: '/', failureFlash: true}),
    function (req, res) {
        console.log('success authentication');
        createJWT(req,res);
        res.send(popupTools.popupResponse(req.user));
    }
);

这看起来非常可疑:
var user=USERS[id]
@robertklep这行有什么可疑之处?我没有告诉你什么是
用户
?什么是
id
?@robertklep您可以在这里查看passportJs文档: