2014-07-02 73 views
1

我的web應用程序中有一個掛鉤,用於將用戶重定向到首次登錄/註冊時的編輯配置文件頁面。創建帳戶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

嘗試水木清華這樣的,在客戶端:

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

我正在使用accounts-facebook登錄包,因此登錄和註冊按鈕是相同的。我只希望一旦將新用戶添加到數據庫中,它就會重定向...雖然我可以這樣做嗎?在服務器端設置一個會話變量,當一個新賬戶被創建時,改變它的值。每次值改變(意味着第一次登錄時),將用戶重定向到編輯配置文件頁面(會話變量可在服務器和客戶端中調用,是否正確?) – yimmy

+0

否,會話僅存在於客戶端。您可以在創建用戶時添加一些選項,例如'profile.firstLogin = true;'在回調函數中的Meteor.loginWithFacebook'函數中,如果結果沒有錯誤,則重定向到路徑'/ edit_form'。當用戶完成編輯時,您必須更改此選項'profile.firstLogin'。 – none

1

首先,您想要在客戶端上運行重定向,而不是在服務器上運行。

可能在註冊方法上使用回調,以便當用戶創建帳戶時,她將被重定向。但最有可能你從來沒有希望登錄的用戶訪問註冊或登錄頁面。爲了處理你可以使用Meteors的反應。在註冊頁面上,你可以使用鉤子,如果她已登錄用戶重定向。

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

現在,當用戶註冊的,她是register路線上,但她沒有登錄,所以她不會被重定向。只要註冊過程完成,她仍然會在register路線上,但她將被登錄。由於流星的反應性,onBeforeAction函數將重新運行(因爲Meteor.userId()的結果已更改),因此她將被重定向。

您也可以在登錄頁面上使用它,這樣任何登錄的人都將被重定向,而不是看到登錄頁面。