2014-12-29 68 views
1

我正在做一个简单的SPA,其中我使用Sails.JS作为REST API和AngularJS作为我的前端。 我现在正在努力弄清楚如何组合这两者来处理会话。使用Sails.JS和AngularJS处理会话/ cookie

如果我以错误的方式回答这个问题,请随时给我一些指导。

-

这是我的登录功能的一部分。当成功的登录发生时,我会将用户对象与会话一起返回给我的客户端。

user.js的

if(user) { 
      bcrypt.compare(userObj.password, user.encryptedPassword, function(err, match) { 
       if(err) { 
        res.json({rspMessage: 'Server error'}, 500); 
       } 

       if(match) { 
        req.session.user = user; 
        res.json(req.session.user); // return user data and session. 
        /* This returns something like this 
        { cookie: 
         { path: '/', 
          _expires: null, 
          originalMaxAge: null, 
          httpOnly: true }, 
         user: { 
         username: 'admin', 
         id: '549f2ad213c64d3b2f3b9777'} 
        } 
        */ 
       } 
      }); 
     } 

login服务

这里是我的login服务并不真正做太多现在。我想这是跟踪会议的地方。我只是不确定如何去做这件事...没有太多的关于结合Sails + AngularJS的教程。

MyApp.factory('loginService', ['$cookieStore', '$http', '$rootScope', function($cookieStore, $http, $rootScope){ 

var _user = {}; 

return { 
    login: function(credentials) { 
     return $http.post('/user/login', credentials) 
     .then(function(result) { 
      return result.data; 
     }); 
    } 
} 
}]) 

我想以某种方式检查会话对我的后端,看看它是否有效或是否已过期。如果会话仍然有效,即使用户关闭浏览器/刷新,用户也将保持登录状态。

建议,链接..任何有用的赞赏。

回答

1

下面是一些提示,我可以给你:

  1. 由于帆v0.10,您可以使用自定义的响应(doc page),这是一个更好的做法比使用

    res.status(...); 
    res.json(...); 
    
  2. 会议您使用Sails创建的cookie将保存在服务器端。也许你可以创建一个url(例如GET/me)来知道这个会话是否仍然有效。您的Angular应用程序会在每次加载页面时(在我建议的run block中)向该URL发出请求,以确定用户是否仍然登录到服务器端。

如果您需要更高的精度,请不要犹豫。

+0

为此目的使用本地存储如何? – xmaestro

+0

问题是你需要询问服务器会话是否仍然有效,因为它存储在服务器端。通过执行正常请求(例如发布表单)或安全地获取用户信息请求。 –