2014-01-23 190 views
21

我使用內置的LoginButtons選項和Meteor,我想在用戶登錄後重定向。使用內置的web片段意味着我不能使用Meteor的回調.loginwithPassword和我看不到Iron-Router內部的任何鉤子來做重定向。使用Meteor和鐵路路由器登錄後重定向

有什麼建議嗎?

+0

你嘗試這個https://github.com/EventedMind/iron-router#using-hooks Router.before(mustBeSignedIn,{except:['login','signup','forgotPassword']}); – pahan

+0

我看不到任何使用此示例的代碼段,看看如何使用它 – user2243825

回答

22

流星往往呈現如此迅速,用戶已經定義之前的頁面被加載。你需要使用Meteor.loggingIn()來佔你在登錄過程是情況此代碼的工作對我來說:

this.route('myAccount', { 
    path: '/', 
    onBeforeAction: function() { 
    if (! Meteor.user()) { 
     if (!Meteor.loggingIn()) Router.go('login'); 
    } 
    } 
} 
+12

'if(!Meteor.loggingIn())Router.go('login');' –

1

您可以簡單地使用你已經在愛爾蘭路線

Router.go(「/ myRouterPathToTemplate」)

+0

愛它!謝謝。 – the0ther

+0

您可以添加一個如何實現的示例 – Chris

5

應該很簡單,你只添加類似配置現有的途徑之一:

Tracker.autorun(function() { 
    var currentRoute = Router.current(); 
    if (currentRoute === null) { 
    return; 
    } 

    if (currentRoute.route.getName() === 'login' && Meteor.user() !== null) 
    Router.go('WelcomeNewUser'); 
    } 

如果用戶未登錄,您也可以使用與其他模板相同的路線。

就像這樣:

this.route('myAccount', { 
    before: function() { 
    if (!Meteor.user()) { 
     this.render('login'); 
     this.stop(); 
    } 
    } 
} 

沒有魔法,只是進去看了docs;)

+0

請注意,「Deps」現在稱爲「Tracker」。 –

+0

此代碼將駐留在客戶端? – mfq

+0

@mfq是的,因爲它僅用於渲染模板。 –

6

這個例子可能是有用的

// main route render a template 
Router.route('/', function() { 
    this.render('main'); 
}); 

// render login template 
Router.route('/login', function() { 
    this.render('login'); 
}); 


// we want to be sure that the user is logging in 
// for all routes but login 
Router.onBeforeAction(function() { 
    if (!Meteor.user() && !Meteor.loggingIn()) { 
     this.redirect('/login'); 
    } else { 
     // required by Iron to process the route handler 
     this.next(); 
    } 
}, { 
    except: ['login'] 
}); 

// add here other routes 

// catchall route 
Router.route('/(.*)', function() { 
    this.redirect('/catchallpage'); 
}); 
相關問題