1

ユーザーを認証するために社内のユーザー管理システムを使用する必要があります。このシステムは、グループ、ロール、およびテナントへのユーザーのメンバーシップも保持します。これは、承認作業を行うときに最も役立ちます。

accounts-personaのコードを見ましたが、うまくいきません。したがって、私は何か間違ったことをしていると推測します。

サーバーには新しい 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 は「Failed Login { 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 に答える