javascript - 登录后根据配置文件参数路由用户

标签 javascript meteor

当用户创建配置文件时,他们可以在两个用户选项之间进行选择,这意味着他们的用户配置文件对象将类似于:

{
    name: "Jane Doe",
    userType: "user-A"
}

我想做的是设置一个重定向,一旦用户登录,它将检查他们是什么类型的用户并将他们重定向到页面。

如果 userType = user-A,他们将转到 localhost:3000/user-A
如果 userType = user-B,他们将转到 localhost:3000/user-B

我目前正在使用 Iron Router 作为我的路线,并使用帐户密码作为帐户

我在客户端尝试了以下操作,但打印出 null

Template.login.events({
    'submit #at-pwd-form': function() {
        console.log(Meteor.userId());
    }
});

编辑 1

也尝试使用以下代码从服务器端执行此操作,但我收到 Iron Router 错误:

Accounts.onLogin(function () {
  var pathToProfile = "/" + Meteor.user().profile.userType;
  console.log(pathToProfile); // Proof that variable is being saved properly
  Router.go(pathToProfile);
});

错误:

I20160811-22:58:28.560(-4)? Exception in onLogin callback: TypeError: Object function router(req, res, next) {
I20160811-22:58:28.560(-4)?     //XXX this assumes no other routers on the parent stack which we should probably fix
I20160811-22:58:28.560(-4)?     router.dispatch(req.url, {
I20160811-22:58:28.560(-4)?       request: req,
I20160811-22:58:28.561(-4)?       response: res
I20160811-22:58:28.561(-4)?     }, next);
I20160811-22:58:28.561(-4)?   } has no method 'go'
I20160811-22:58:28.561(-4)?     at server/main.js:13:10
I20160811-22:58:28.561(-4)?     at runAndHandleExceptions (packages/callback-hook/hook.js:133:1)
I20160811-22:58:28.561(-4)?     at packages/callback-hook/hook.js:140:1
I20160811-22:58:28.562(-4)?     at packages/accounts-base/accounts_server.js:167:5
I20160811-22:58:28.562(-4)?     at [object Object]._.extend.each (packages/callback-hook/hook.js:109:1)
I20160811-22:58:28.562(-4)?     at AccountsServer.Ap._successfulLogin (packages/accounts-base/accounts_server.js:166:21)
I20160811-22:58:28.562(-4)?     at AccountsServer.Ap._attemptLogin (packages/accounts-base/accounts_server.js:355:10)
I20160811-22:58:28.562(-4)?     at [object Object].methods.login (packages/accounts-base/accounts_server.js:532:21)
I20160811-22:58:28.562(-4)?     at maybeAuditArgumentChecks (packages/ddp-server/livedata_server.js:1704:12)
I20160811-22:58:28.563(-4)?     at packages/ddp-server/livedata_server.js:711:19

最佳答案

您可以使用onSubmitHookAccountsTemplates.configure()

//code goes to lib folder, shared code between client & server
onSubmitHook: function onSubmitHook(error, state) {
    if (!error) {
        if (state === 'signIn') {
            var user = Meteor.user();
            if (user.userType == "user-A") {
                Router.go('/user-A');
            } else {
                Router.go('/user-B');
            }
        }
    }
}

关于javascript - 登录后根据配置文件参数路由用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38908801/

相关文章:

azure - 部署 Meteorjs 时在 web.config 中使用的路径

meteor - Meteor.com meteor 托管什么时候才能足够可靠以供生产使用?

javascript - React 组件中的 Async Meteor.call

javascript - 为什么现在会出现这个模板?

mongodb - 自动增加 meteor 简单模式成员

javascript - NodeJS v15.7.0 | Electron v11.2.3 | Uncaught Error : Uncaught TypeError: Class constructor <Class> cannot be invoked without 'new' , 但是什么?

javascript:生成由特定 "margin"分隔的随机数

javascript - Protocol Buffer : Uncaught reference error: exports is not defined

javascript - 如何使用 jQuery 隐藏依赖于选择选项的选择选项列表

javascript - 如何默认隐藏jQmobile页面