我正在使用Meteor和React构建一个小应用程序。我没有使用令人敬畏的Meteor帐户库来处理用户身份验证,因为我需要使用外部API。
基本上,Meteor的服务器端用作代理与API通信。
我创建了从Meteor到API的身份验证:
Meteor.methods({
'user.authentication': function (email, password) {
try {
const res = request.postSync(authenticate, {
method: 'POST',
json: true,
body: {
email, password
}
});
if (res.response.statusCode === 200) {
return res.body;
}
throw new Meteor.Error(res.response.statusCode, res.response.body.error.message);
} catch (err) {
throw new Meteor.Error(400, err.message);
}
}
});
这工作正常......登录组件发送和接收成功的数据我正在尝试做的“保存”用户会话正在使用Meteor Session:
Login.js:
onSubmit(e) {
e.preventDefault();
const email = this.refs.email.value.trim();
const password = this.refs.password.value.trim();
Meteor.call('user.authentication', email, password, (error, res) => {
if (error) {
console.error(error.reason);
} else {
Session.set({
user_id: res.response.user_id,
token: res.response.token
});
history.push('/account');
}
});
}
不幸的是,我没有看到会话值正确保存,因此我无法创建控件以将经过身份验证或未经身份验证的用户重定向到正确的页面...
我不知道我的方法是否正确...我想知道我做错了什么,万一有更好的解决方案来处理它。
例如我不喜欢在客户端保存token和user_id,我想像Meteor一样保存服务器端用于他的用户集合,并且能够处理我的所有API请求而不必每次都传递令牌...
答案 0 :(得分:1)
不幸的是我没有看到会话值正确保存,所以我可以 不创建控件来重定向经过身份验证或未经身份验证的用户 到正确的页面...
流星会话requires a key-value pair。
因此您可能会尝试:
Session.set("userAuth",{
user_id: res.response.user_id,
token: res.response.token
});
或
Session.set("userId", res.response.user_id);
Session.set("userToken",res.response.token);
例如,我不喜欢在客户端中保存令牌和user_id,我 我想像Meteor那样为他的用户保存服务器端 集合并能够处理我的所有API请求而不通过 每次令牌......
实际上,Meteor使用您的浏览器localStorage在客户端成功登录后存储用户令牌。
使用帐户登录Meteor应用程序并检查localStorage; - )