1

我需要使用内部用户管理系统来验证我的用户。该系统还保存用户对组、角色和租户的成员资格,这在进行授权时最有用。

我查看了帐户角色的代码,但它对我不起作用。因此,我推断我做错了什么。

在服务器上有一个新的 LoginHandler:

Meteor.startup( function () {
   var config = Accounts.loginServiceConfiguration.findOne( {service: 'sertal'} );
   if ( !config ) {
      Accounts.loginServiceConfiguration.insert( { service: 'sertal' } );
   }
} );

Accounts.registerLoginHandler( function ( options ) {
   if ( !options.sertal && !options.assertion )
      return undefined; // don't handle

   var url = "http://dev.sertal.ch/checkCredential";
   var request = {
      params: {
         uname: options.email,
         pword: options.password
      }
   };
   var result = Meteor.http.get( url, request );

   if ( result.statusCode !== 200 ) {
      throw new Meteor.Error( Accounts.LoginCancelledError.numericError, 'Sertal Login Failed' );
   } else {
      var user = result.data.userrec;
      user.groups = result.data.grprec;
      user.id = user._id;
      return Accounts.updateOrCreateUserFromExternalService( 'sertal', user );
   }

} );

在客户端上,我在按下登录按钮后使用此代码:

Accounts.callLoginMethod( {
   methodName: 'login',
   methodArguments: {sertal: true,
      email: $( '#sertal-email' ).val(),
      password: $( '#sertal-password' ).val(),
      resume: false
   },
   userCallback: function ( error ) {
      if ( error ) {
         console.log( "error: " + error );
      } else {
         $( "#sertalLoginFormDiv" ).dropdown( 'toggle' );
      }
   }
} );

但它不会触发 LoginHandler。一定有什么东西不见了,但我想不通。

我找不到有关该主题的任何文档。答案也可能是指出一些解释该过程的文档。

4

1 回答 1

0

根据我的测试,methodArguments 必须是一个对象数组。

此外,从我在日志中看到的内容来看,如果 methodArguments 对象在对象的根目录中包含密码,则 Meteor 会引发错误,并显示“登录失败 { type: 'password',...”

我能够通过将所有处理程序的参数作为对象的一部分来完成这项工作。像这样,在客户端:

loginRequest = {myLogin:{email: email, password: password}};
Accounts.callLoginMethod({
    methodArguments: [loginRequest],
    userCallback: callback
});

在客户端执行时,meteor 调用我的服务器代码:

Accounts.registerLoginHandler( function("someName", loginRequest{
    if(loginRequest.myLogin){
        // I get the loginRequestObject, and can attempt to sign in...
    }
});

注意,我使用的是 Meteor 1.0。

于 2014-11-13T16:41:06.873 回答