Meteor - loginWithPassword在成功时什么都不做

时间:2017-09-13 14:45:17

标签: javascript reactjs meteor meteor-accounts

我正在尝试在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

1 个答案:

答案 0 :(得分:0)

我猜测没有任何事情发生,因为你没有要求它做任何事情。

你不应该做像

这样的事情
this.setState({loggedIn: true})

将触发您的组件重新渲染,在您的渲染方法中,您应该执行以下操作:

render() {
  if (this.state.loggedIn)
    return <Redirect to="/dashboard" />

假设您使用的是React Router v4和Redirect组件(比history.push()更好)