2013-06-28 5 views
14

dodam rachunki, haseł i kont-bazowe pakiety w MeteorJak zapobiegać automatyczne logowanie po tworzyć użytkownikowi

Kiedy tworzę użytkownikowi takiego:

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 
      }  
    }); 

konto zostało utworzone i użytkownik zalogowany .

na przykład, loguję się jako administrator i chcę utworzyć konto dla kogoś, ale nie chcę się wylogowywać po utworzeniu konta.

Jak zapobiec automatycznemu logowaniu po utworzeniu użytkownika?

znajdę kod źródłowy accouts-password pakietach:

48 - 63 linie:

// 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 
    }); 
}; 

powinienem zmodyfikować kod źródłowy, aby rozwiązać ten problem?

Każda pomoc jest doceniana.

Odpowiedz

20

Próbujesz użyć zarządzania kontami po stronie klienta, aby wykonać zadanie, dla którego nie zostało zaprojektowane.

Celem pakietu po stronie klienta jest umożliwienie nowym użytkownikom utworzenia konta i natychmiastowego zalogowania.

Należy pamiętać, że niektóre funkcje można uruchamiać na kliencie i/lub na serwerze z różnymi zachowaniami, a dokumenty Accounts.createUser określają, że: "Na kliencie funkcja ta loguje się jako nowo utworzony użytkownik po pomyślnym zakończeniu ukończenie."

Wręcz przeciwnie: "Na serwerze zwraca nowo utworzony identyfikator użytkownika." (nie zadzierza z aktualnie zalogowanym użytkownikiem na kliencie).

Aby rozwiązać problem, należy napisać metodę po stronie serwera, tworząc nowego użytkownika i móc wywoływać go z panelu administratora po stronie klienta, po prawidłowym wypełnieniu formularza tworzenia własnego projektu przez użytkownika.

+1

Dziękujemy! Jestem tak nieostrożny, że zaniedbałem ważne wyjaśnienie. –

+0

ahhhhhhhhhhhhhhhhhhh dzięki to był świetny komentarz +1 –

1

Jeśli naprawdę chcesz to zachowanie będzie trzeba zmodyfikować password_server.js

i usunąć linie 474-475 zawierających:

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

więc użytkownik nie będzie zalogowany, gdy użytkownik jest tworzony.

0

Miałem ten sam problem. Chciałem stworzyć interfejs administracyjny, w którym administrator może ustawić hasło użytkownika, ale nie przekazać go do metody serwera w postaci zwykłego tekstu. Strona klienta Accounts.createUser już to zajmuje, więc zmieniam normalną sekwencję zdarzeń w accounts-password/password-server.js w obecności flagi. Nie jest to doskonałe ani ładne, ale wydaje się działać i nie trzeba bezpośrednio modyfikować pakietu 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); 

     }}); 
    }); 
+0

Daje mi kilka błędów, nie można uzyskać Meteor.server.method_handlers.createUser; – jetlej

0

Jeśli chcesz nadal korzystać Accounts.createUser na kliencie bez logowania użytkownika w. Można zadzwonić Meteor.logout() z createUser „s optional callback.

Accounts.createUser(user, err => { 
    if (err) { 
    // handle error 
    return; 
    } 

    // Prevent unwanted login 
    Meteor.logout(); 
});