我正在尝试在Meteor和React框架中构建一个简单的登录表单。用户管理在应用程序的其他位置完成,因此我尝试使用Meteors的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: 'test@test.com'}, '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 /> } );
}
});
根据Meteor-docs,应在触发loginWithPassword后调用onLogin方法。 我从以下教程中获得了这些片段:
https://medium.com/@satyavh/using-flow-router-for-authentication-ba7bb2644f42
答案 0 :(得分:0)
我猜测没有任何事情发生,因为你没有要求它做任何事情。
你不应该做像
这样的事情this.setState({loggedIn: true})
将触发您的组件重新渲染,在您的渲染方法中,您应该执行以下操作:
render() {
if (this.state.loggedIn)
return <Redirect to="/dashboard" />
假设您使用的是React Router v4和Redirect组件(比history.push()
更好)