2017-04-11 1 views
0

Ionic Cloudの認証サービスを使用してユーザーログインを実装しようとしており、Cordova inAppBrowserを表示しないことをお勧めします。認証エラー(パスワードが間違っているなど)が発生した場合は、エラーハンドラが起動することが予想されますが、何らかの理由でこれが実行されることはありません。Ionic custom authでログインエラーを処理するには?

私のログイン・コンポーネントのメソッドは、これを含んでいます

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ボディに応答することを確認しました。これはコード(PHP、Laravel 3)である:どうやら方法はありません

:私は、関連するようだgithubの上の2つの問題が見つかりました

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); 
    } 
    } 

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ファイル

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 

}); 
htmlファイル内

<div > 
 
     <ion-row > 
 
     <ion-item > 
 
      <ion-label text-wrap color=red color="primary" > 
 
    {{anyErrors}} 
 
    </ion-label> 
 
    </ion-item> 
 
     </ion-row> 
 
    </div>

だから、イオン.TSのいずれかのエラーは、私がログインページのためにこれを使用してHTMLページを流れます。私は上記のdivコードを持っています。エラーがなければmsgは表示されず、エラーmsgが表示されます。

関連する問題