做登陆功能的时候,在后台注册了session变量,可是在前台却无法获取,求各位园神帮帮忙!下面是我的代码
登陆界面的js:
.controller('loginCtrl',['$scope', 'host', 'security', function($scope, host, security){
$scope.init=function(){
//$(".row1").hide();
// $scope.showNum = 0;
$scope.refreshCaptcha('captcha');
$scope.user = security.user();
if($scope.user){
alert($scope.user);
}
};
$scope.memberInfo={};
$scope.memberInfo.number="";
$scope.memberInfo.password="";
$scope.memberInfo.captcha="";
$scope.login=function(){
host.post('/login', {id:$scope.memberInfo.number, password:$scope.memberInfo.password, captcha:$scope.memberInfo.captcha}, function(err,result){
if( result.state == 'success' ) {
alert('welcome to hotKidClub!');
window.location.reload();
console.log(result);
}
else { alert ( result.content ); $scope.refreshCaptcha('captcha') };
});
};
$scope.refreshCaptcha = function(id) {
document.getElementById(id).src = "/Captcha/?t=" + Math.random();
};
}] );
登陆界面的factory:security
.factory('security', [ function() {
return {
user : function() {
if(!window.member) return null;
return window.member;
},
update : function(name, obj) {
window[name] = obj;
}
}
}]);
前台API:
.factory('host', [ '$http', 'config', function($http , config) {
return {
post : function(url, parms, callback) {
$http({ method:'POST', url:config.host_url+url, data:parms })
.success(function(result) { callback(null, result); })
.error(function(err) { callback(err, null); })
},
get : function(url, parms, callback) {
$http({ method:'GET', url:config.host_url+url, params:parms })
.success(function(result) { callback(null, result); })
.error(function(err) { callback(err, null); })
}
}
}])
后台的API:
router.post('/login', securityBO.checkVerify, function(req, res, next) {
var memberId = req.body.id;
var password = req.body.password;
securityBO.login(memberId, password, req, function( result ) {
console.log( result );
res.send( result );
});
});
调用的login方法:
login : function(memberId, password, req, callback) {
if((!memberId) || (memberId=='')) return callback(sxutil.setFail('帐户名称不能空白'));
if((!password) || (password=='')) return callback(sxutil.setFail('密码不能空白'));
if(!(memberId=='aaa')||!(password=='000')){
callback(sxutil.setFail("用户名或密码错误"));
return
}
req.session.member = 'aaa';
//console.log(req.session );
req.session.save();
callback(sxutil.setSuccess(req.session.member));
},
上面就是相关的代码,求各位园主指教!感激感激!
这个是原来写的前端API:
.factory( 'DataAPI' , [ '$http' , 'config' , function( $http , config ){
return {
post : function( url , parms , success , error ){
$http( { method:'POST' , url:config.backend+url , data:parms } )
.success( success )
.error( error )
},
get : function( url , parms , success , error ){
$http( { method:'GET' , url:config.backend+url , params:parms } )
.success( success )
.error( error )
}
}
}] );
原来是可以获取到的,变动的地方也只有这一个,还有一些文件的分布,但前端页面的分布,但前端页面的分布感觉和这个没什么关系
你是ajax提交的,不能使用session。在前端使用angular的项目中,一般不采用session认证,可以简单实现oauth认证。
在上一个项目中这么做还是可以的
@picapoo: 也是用的ajax?
@幻天芒: 找到问题了,之前在layout.ejs文件中有这样一段
<% if(account) { %>
<script>
window.member = <%- JSON.stringify(account) %>
var _init = function(){
var _member = window.member;
//console.log( _member )
if( !_member || typeof( _member.address_b )=='number' || typeof( _member.address_c )=='number' ) return;
$.get( './convertAddr', { address_b:_member.address_b,address_c:_member.address_c }, function( result ) {
if(result.code>0) { console.log(result.msg); return; }
window['member'].address_b_2 = result.content.address_b;
window['member'].address_c_2 = result.content.address_c;
});
}
_init();
</script>
<% } %>
后来的没有写。
@幻天芒: 不过这是经理写的,而经理已经走了,我想哭啊..
@picapoo: 感觉这样的做法比较危险了,前端存储member数据会不会很危险?
另外,既然你用Angular+API,那就直接前后端分离吧。
@幻天芒: 其实我只是个菜鸟,然后刚来公司一个多月,带我的师傅就GO了。我在师傅留下来的项目上继续做的,不明白的时候,就看只好看以前的项目作比对了。
这个确实是前后端确实是分离的。
@picapoo: 看你说的那种结构,在EJS中包含后端变量的用法,这前后端分离不彻底哦。