我想在Meteor和React框架内建立一个简单的登录表单。用户管理在应用程序的其他地方完成,所以我尝试使用Meteors的loginWithPassword功能。流星 - loginWithPassword只是无所成就
export default class Login extends React.Component{
constructor(props){
super(props);
}
render() {
return (
<div id="login">
<form method="POST" id="loginForm" className="boxCont">
<div>
<label>Username</label>
<input id="mail" type="text" name="mail" placeholder="Please enter your username here"/>
</div>
<div>
<label>Password</label>
<input id="password" type="password" name="password" placeholder="And your password here"/>
</div>
<div>
<button id="signIn" onClick={() => this.handleLogin()} name="signIn" className="btn left">Sign In</button>
</div>
</form><a id="forgotpass" href="#">Forgot Your Password?</a>
</div>
);
}
handleLogin(){
Meteor.loginWithPassword({username: '[email protected]'}, 'test', function (err) {
console.log(err)
});
}}
如果有错误出现在登录时,该功能似乎工作正确,与预期结果(“用户未找到”,“密码错误” ......)响应。 但是,如果给定的数据是正确的,那么既没有错误也没有定义Meteor.user或userId()。
我忘了加载帐户密码或流星所需的任何属性吗?
用户输入-Db就像上面写的一样。
//编辑:
我正在使用Flow-Router验证对特定路由的访问权限。
const exposed = FlowRouter.group({ name: 'exposed' });
const loggedIn = FlowRouter.group({
name: 'loggedIn',
triggersEnter: [() => {
if (Meteor.loggingIn() || Meteor.userId()){
FlowRouter.route = FlowRouter.current();
}
if (FlowRouter.route.name === 'auth'){
Session.set('redirectAfterLogin', FlowRouter.route.path);
}
FlowRouter.go('auth');
}],
});
Accounts.onLogin(() => {
console.log("onLogin")
redirect = Session.get('redirectAfterLogin');
if (redirect !== '/auth'){
FlowRouter.go(redirect)
}
});
exposed.route('/auth', {
name: 'auth', action(params, queryParams){
ReactLayout.render(Empty, { yield: <Login /> });
}
});
exposed.route('/', {
name: 'Dashboard', action(params, queryParams){
ReactLayout.render(App, { yield: <Dashboard /> });
}
});
根据流星文档,onLogin方法应该在loginWithPassword被触发后调用。 我从下面的教程这些内容摘要:
https://medium.com/@satyavh/using-flow-router-for-authentication-ba7bb2644f42
https://docs.meteor.com/api/accounts.html#Meteor-loginWithPassword 用户对象或字符串 将字符串解释为用户名或电子邮件;或具有单个键的对象:电子邮件,用户名或ID。用户名或电子邮件匹配不区分大小写。 ({email:'[email protected]'},'test',function(err) ''' –
感谢您的快速响应。我用一组电子邮件进行了尝试,如果其中一个参数不正确/无法找到,我会得到预期的错误,如果两者都正确,则什么也不会发生(即使accounts.login方法未触发)。 – Bl3g3
如果你使用'console.log(Meteor.user())',它会打印什么?? –