2014-07-02 5 views
1

У меня есть крючок на моем webapp, который перенаправляет пользователя на страницу профиля редактирования при первом входе/регистрации.Route.go() при создании счета не работает (METEOR)

Это выглядит немного как это:

Accounts.onCreateUser (опции, пользователь) -> если options.profile

options.profile.aboutMe = null 
options.profile.email = null 
options.instrumentsPlayed = null 
options.instrumentsPlayedTemporary = null 

Router.go('edit_form') 

пользователь

Так он добавляет несколько полей к страницу профиля, и, предположительно, строка Router.go должна перенаправить пользователя на страницу edit_form. Я пробовал код без строки Router.go, и он работает правильно. Я запускаю это в файле сервера. Когда я пытаюсь войти в систему с помощью строки Router.go, она дает мне «внутреннюю ошибку сервера» и не входит в систему. Когда я запускаю ее без нее, она работает правильно, но явно не перенаправляет. Где проблема?

ответ

1

Try-л, как это, на клиенте:

Template.signup.events "submit #signup": (e, t) -> 
Meteor.call "registerUser", email, password, profile, (err, result) -> 
    if err 
    throwError err.reason 
    console.log err 
    else 
    Router.go "/edit_form" 

Accounts.onCreateUser (options, user) работает только на сервере, но вы хотите перенаправить клиента. registerUser это мой метод Метеор, где я звоню Accounts.onCreateUser (options, user)

+0

Я использую учетную запись для учетных записей-facebook, поэтому кнопка forlogin и регистрация одинаковы. Я только хочу, чтобы он перенаправлялся, как только новый пользователь был добавлен в базу данных, хотя ... Могу ли я сделать что-то подобное вместо этого? Установите переменную сеанса на стороне сервера, когда создается новая учетная запись, измените ее значение. Каждый раз, когда значение изменяется (это означает, что при первом входе в систему) перенаправление пользователя на страницу профиля редактирования (переменная сеанса может быть вызвана как на сервере, так и на клиенте, правильно?) – yimmy

+0

Нет, сеанс существует только на клиенте. Вы можете добавить некоторый параметр в профиль, когда вы создаете пользователя, например, 'profile.firstLogin = true;' Когда функция 'Meteor.loginWithFacebook' в функции обратного вызова, если результат не имеет ошибок, перенаправляйтесь к пути'/edit_form'. И вы должны изменить этот параметр 'profile.firstLogin', когда пользователь закончит редактирование. – none

1

Прежде всего, вы хотите запустить свои переадресации на клиенте, а не на сервере.

может использовать обратный вызов для метода регистрации, так что, когда пользователь создал учетную запись, она будет перенаправлена. Но, скорее всего, вы never хотите, чтобы вошедший пользователь посещал регистры или страницы входа. Чтобы справиться с этим, вы можете использовать реактивность Meteors. На странице регистрации вы можете использовать крючки для перенаправления пользователя, если она входит в систему.

this.route('register', { 
    onBeforeAction: function() { 
    if (Meteor.userId()) 
     this.redirect('myRouteForLoggedInUsers') 
    } 
}); 

Теперь, когда пользователь регистрируется она находится на register пути, но она не вошли в систему, поэтому она не будет перенаправлен , Как только процесс регистрации будет завершен, она все равно будет находиться на маршруте register, но она войдет в систему. Из-за реактивности Meteors функция onBeforeAction будет повторно запущена (так как результат Meteor.userId() изменился), и поэтому она будет перенаправлена.

Вы также можете использовать его на странице входа, так что любой, кто войдет в систему, будет перенаправлен вместо просмотра страницы входа.

 Смежные вопросы

  • Нет связанных вопросов^_^