2017-04-11 1 views
0

Ionic Cloud의 인증 서비스를 사용하여 사용자 로그인을 구현하려고 시도하고 있으며 Cordova inAppBrowser를 표시하지 않는 것이 좋습니다. 인증 오류 (예 : 잘못된 비밀번호)가 발생하면 오류 처리기가 작동 할 것으로 예상되지만, 어떤 이유로 이것이 절대로 안되는 것 같습니다.이오니아 사용자 정의 인증을 사용하여 로그인 오류를 처리하는 방법은 무엇입니까?

내 로그인 구성 요소의 방법이 포함되어 있습니다

let loginData = { 
    email: this.email, 
    password: this.password 
}; 
let loginOptions: AuthLoginOptions = { 
    inAppBrowserOptions: { 
    hidden: true 
    } 
}; 
this.auth.login('custom', loginData, loginOptions).then(() => { 
    console.log('login success'); 
}, (err) => { 
    console.log('login error', err); // <-- this never gets executed. 
}); 

내가 내 인증 서버 (401)의 HTTP 상태 및 오류 속성을 포함하는 JSON 본체로 응답해야했다.

은 분명히 방법이 없다 : 나는 관련 보인다 GitHub의에이 문제를 발견

public function get_login() 
    { 
    try { 
     $redirect_uri = CustomAuthentication::process(
     $_GET['token'], 
     $_GET['state'], 
     $_GET['redirect_uri'] 
    ); 
     return Redirect::to($redirect_uri); 
    } catch (\Exception $e) { 
     return Response::json(array(
     'ok' => false, 
     'error' => $e->getMessage(), 
     'code' => $e->getCode() 
    ), 401); 
    } 
    } 

: 이것은 (PHP, Laravel 3) 코드입니다 inAppBrowser가 숨겨져있는 순간에이 기능을 사용할 수 있습니다. 아니면 다른 옵션이 있습니까?

지금이 방법을 사용할 수없는 경우 사용자에게 좋은 로그인 흐름을 제공하기 위해 대안이 무엇이겠습니까? 실패한 로그인 시도에 대해 의미있는 오류 메시지가 표시됩니다.

보이는 inAppBrowser를 사용하여 구현해야합니까? 그렇다면 어디에서 문서 또는 예제를 찾을 수 있습니까?

공교롭게도 공식 문서는 많이 말하지 않으며 (http://docs.ionic.io/services/auth/custom-auth.html#login) 내가 찾은 자습서는 구식입니다.

답변

1

나는 똑같은 문제가 있었다 !!

JSON을 렌더링하는 대신 인증 오류가 발생하면 서버에서 리디렉션해야합니다. 이 같은

뭔가 :

public function get_login() 
    { 
    try { 
     $redirect_uri = CustomAuthentication::process(
     $_GET['token'], 
     $_GET['state'], 
     $_GET['redirect_uri'] 
    ); 
     return Redirect::to($redirect_uri); 
    } catch (\Exception $e) { 
     $redirect_uri = $_GET['redirect_uri'] . '&' . http_build_query([ 
      'error' => $e->getMessage(), 
      'state' => 401, 
      'code' => $e->getCode(), 
     ]); 
     return Redirect::to($redirect_uri); 
    } 
    } 

(코드에 오류가있는 경우 미안 해요, 난 Lavarel를 모르는))

이 코드에서 https://github.com/ionic-team/ionic-cloud/issues/53#issuecomment-296369084

을 기반으로 Ruby on Rails의 세계 :

error_params = { error: error, state: 401 } 
url = "#{params[:redirect_uri]}&#{error_params.to_query}" 
redirect_to url 

내가이 chang을 만든 직후 전자 서버에 이온 응용 프로그램이 작동하기 시작했습니다.

-1

anyErrors : any;

컨트롤러에 있습니다.TS

<div > 
 
     <ion-row > 
 
     <ion-item > 
 
      <ion-label text-wrap color=red color="primary" > 
 
    {{anyErrors}} 
 
    </ion-label> 
 
    </ion-item> 
 
     </ion-row> 
 
    </div>
는 그래서 HTML 페이지를 흘러 이온 .TS에서 오류가 나는 로그인 페이지에 대해이 작업을 사용하는 html 파일에

this.auth.login('basic', details).then(() => { 
    this.isUserLoggedIn = true; // <------ Debug here (1) 
    this.currentUserData = this.user; 
    console.log(this.currentUserData); 
    return this.currentUserData; 
}, (err: IDetailedError) => { 
this.anyErrors= err; // map the error here 

}); 

파일. 즉 로그인 제출 버튼 아래에 위의 div 코드가 있습니다. 오류가 없으면 msg가 표시되지 않고 오류 msg가 있으면 표시됩니다.

관련 문제