在Meteor中使用LDAP忘记密码

时间:2014-09-30 10:16:56

标签: meteor ldap

我想用Meteor 0.9.3实现ForgotPassword-Mail。但是在添加accounts-password forgotPassword运行后,但LogIn不再运行了。 虽然我之前添加了accounts-ui,但我的logIn运行良好。当我尝试使用accounts-ui提交我的ForgotPassword时,控制台会抛出:Exception in delivering result of invoking 'returnEMail': ["submit #box-reset"] 我使用完全相同的LogIn: LoginHandler with ldapjs and Meteor.methods

客户端代码为forgetPassword:

Template.forgotPassword.events({
    'submit #box-reset': function(e,t){
        e.preventDefault();

        var forgotPasswordForm = $(e.currentTarget),
            username = trimInput(forgotPasswordForm.find('#forgotPasswordEmail').val().toLowerCase());

        if (isNotEmpty(username)){
            Meteor.call('returnEMail', username, function (err, result) {
                    if (err) {
                        console.log(err);
                    } else {
                        Accounts.forgotPassword({ email: result}, function (err) {
                                if (err) {
                                    if (err.message === 'User not found [403]') {
                                        Session.set('alert', 'This email does not exist.');
                                    } else {
                                        console.log(err);
                                        Session.set('alert', 'We\'re sorry but something went wrong.');
                                    }
                                } else {
                                    Session.set('alert', 'Email Sent. Please check your mailbox to reset your password.');
                                }

                            });
                        }
                });
        } else{
            Session.set('alert','Please insert your username!')
        }
        return false;
    }
});

服务器端的代码:

verifyEmail = function(username) {
    LDAP.client = ldap2.createClient({
        url: 'ldap://' + LDAP.serverIP + ':' + LDAP.serverPort
    });

    future = new Future;

    LDAP.client.search(LDAP.searchOu, LDAP.searchQuery(username), function (err, req, res) {
        req.on('searchEntry', function (entry) {
            LDAP.Mail = entry.object.mail;
        });

        req.on('error', function (err) {
            throw new Meteor.Error(500, "LDAP server error");
        });

        req.on('end', function(res, entry){
            future['return'](LDAP.Mail);
        });
    });
    return future.wait();
};

Meteor.methods({
    returnEMail: function(username, err){
        if (err){
            console.log(err);
        } else{
            return verifyEmail(username);
        };
    }
});

那么仍然有可能继续使用Accounts.forgotPassword,这真的很有帮助,还是我会完全拒绝它?提前谢谢你!

1 个答案:

答案 0 :(得分:0)

我发现了:我以前的解决方案不会运行,我仍然不知道。

但我想建议您使用以下页面来解决我的问题:https://github.com/EventedMind/iron-router/issues/315Email.send issue is email is not defined in Meteor

我仍然要把它们装到我的身上,但基本是一样的。 ;)