17

accounts-password および accounts-base パッケージを追加しますMeteor

次のようにユーザーを作成すると:

Accounts.createUser({username: username, password : password}, function(err){
          if (err) {
            // Inform the user that account creation failed
            console.log("Register Fail!") 
            console.log(err)
          } else {
               console.log("Register Success!")
            // Account has been created and the user has logged
          }    
  });

アカウントが作成され、ユーザーがログインしました。

たとえば、管理者としてログインし、誰かのアカウントを作成したいのですが、アカウントの作成後にログアウトしたくありません。

ユーザーの作成後に自動ログインを防ぐ方法は?

accouts-passwordパッケージのソース コードを見つけました。

48 ~ 63 行:

// Attempt to log in as a new user.
Accounts.createUser = function (options, callback) {
  options = _.clone(options); // we'll be modifying options

  if (!options.password)
    throw new Error("Must set options.password");
  var verifier = Meteor._srp.generateVerifier(options.password);
  // strip old password, replacing with the verifier object
  delete options.password;
  options.srp = verifier;

  Accounts.callLoginMethod({
    methodName: 'createUser',
    methodArguments: [options],
    userCallback: callback
  });
};

この問題を解決するには、ソース コードを変更する必要がありますか?

どんな助けでも大歓迎です。

4

4 に答える 4

1

この動作が本当に必要な場合は、変更する必要がありますpassword_server.js

次を含む 474 ~ 475 行を削除します。

// client gets logged in as the new user afterwards.
this.setUserId(result.id);

そのため、ユーザーが作成された後、ユーザーはログインしません。

于 2013-06-28T10:33:07.740 に答える
0

私も同じ問題を抱えていました。管理者がユーザーのパスワードを設定できるが、プレーンテキストでサーバー メソッドに渡すことはできない管理インターフェイスを作成したいと考えていました。accounts-password/password-server.jsこれは Accounts.createUser のクライアント側で既に処理されているため、フラグの存在下で通常のイベント シーケンスを変更するだけです。完璧でもきれいでもありませんが、機能しているようで、accounts-passwordパッケージを直接変更する必要はありません。

Meteor.startup(function ()
    {

        // store the default createUser method handler
        var default_create_user = Meteor.server.method_handlers.createUser;

        // remove it so we can register our own
        delete Meteor.server.method_handlers.createUser;

        Meteor.methods({createUser: function (options) {

            var default_login_method = Accounts._loginMethod;

            // check if noAutoLogin flag is present
            if (options.noAutoLogin)
            {
                // temporarily disable the login method while creating our user

                // NB: it might be possible that simultaneous calls to createUser that do want the default behavior
                // would use the altered Accounts._loginMethod instead

                Accounts._loginMethod = function(s, m, a, p, fn)
                {
                    // this is the callback that is constructed with a closure of the options array and calls internal create functions
                    fn();

                    // restore default _loginMethod so other calls are not affected
                    Accounts._loginMethod = default_login_method;
                }
            }

            // invoke the default create user now that the login behavior has been short-circuited
            default_create_user(options);

        }});
    });
于 2014-04-29T20:13:30.817 に答える