1

チャレンジ ハンドラから submitAdapterAuthentication を受け取ったら、特定の操作を実行しようとしましたが、コードがコンパイルされていないため、操作を実行できませんでした。angular サービスの 1 つのメソッドで submitAdapterAuthentication を使用しています。メソッドは次のようになります。

login: function (user, pass) {
      //promise
      var deferred = $q.defer();
      //tempuser
      tempUser = {username: user, password: pass};
      userObj.user = user;
      checkOnline().then(function (onl) {
        if (onl) { //online
          console.log("attempting online login");
          var auth = "Basic " + window.btoa(user + ":" + pass);
          var invocationData = {
            parameters: [auth, user],
            adapter: "SingleStepAuthAdapter",
            procedure: "submitLogin"
          };
          ch.submitAdapterAuthentication(invocationData, {
            onFailure: function (error) {
              console.log("ERROR ON FAIL: ", error);
            },
            onConnectionFailure: function (error) {
              console.log("BAD CONNECTION - OMAR", error);
            },
            timeout: 10000,
            fromChallengeRequest: true,
            onSuccess: function () {
              console.log("-> submitAdapterAuthentication onSuccess!");
              //update user info, as somehow isUserAuthenticated return false without it
              WL.Client.updateUserInfo({
                onSuccess: function () {
                  //return promise
                  deferred.resolve(true);
                }
              });
            }
          });
        } else { //offline
          console.log("attempting offline login");
          deferred.resolve(offlineLogin());
        }
        uiService.hideBusyIndicator();
      });
      uiService.hideBusyIndicator();
      return deferred.promise;
    }

ここで、chvar ch = WL.Client.createChallengeHandler(securityTest); です。

checkOnlineは、ユーザーがオンラインかどうかをチェックする関数です。

function checkOnline() {
    var deferred = $q.defer();
    WL.Client.connect({
      onSuccess: function () {
        console.log("** User is online!");
        deferred.resolve(true);
      },
      onFailure: function () {
        console.log("** User is offline!");
        deferred.resolve(false);
      },
      timeout: 1000
    });
    return deferred.promise;
  }

最後に、これは SingleStepAuthAdapter.js にある " submitLogin "プロシージャです。SingleStepAuthAdapter はアダプターの名前です。

//-- exposed methods --//
function submitLogin(auth, username){

  WL.Server.setActiveUser("SingleStepAuthAdapter", null);

  var input = {
    method  : 'get',
    headers: {Authorization: auth},
    path : "/",
    returnedContentType : 'plain'
  };

  var response = "No response";
  response = WL.Server.invokeHttp(input);

  WL.Logger.info('Response: ' + response.isSuccessful);
  WL.Logger.info('response.responseHeader: ' + response.responseHeader);
  WL.Logger.info('response.statusCode: ' + response.statusCode);

  if (response.isSuccessful === true && (response.statusCode === 200)){

    var userIdentity = {
      userId: username,
      displayName: username,
      attributes: {
        foo: "bar"
      }
    };

    WL.Server.setActiveUser("SingleStepAuthAdapter", userIdentity);

    return {
      authRequired: false
    };

  }

  WL.Logger.error('Auth unsuccessful');

  return onAuthRequired(null, "Invalid login credentials");
}

そのため、ユーザーを別のページにリダイレクトするためにコントローラーに約束を送信しようとしていますが、チャレンジハンドラーが機能していないため、約束が返されません。

ところで、私はこのチュートリアルに従いました: https://medium.com/@papasimons/worklight-authentication-done-right-with-angularjs-768aa933329c

誰がこれが起こっているのか知っていますか?

4

1 に答える 1