質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ionic

Ionicは、クロスプラットフォームに対応したモバイルアプリ開発のためのオープンソースUIフレームワークです。iOSやAndroid、Webのアプリケーションを1つのコードベースで開発できます。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

Q&A

解決済

1回答

4398閲覧

auth0のRulesのエラーハンドリングの方法

stvrz2

総合スコア7

Ionic

Ionicは、クロスプラットフォームに対応したモバイルアプリ開発のためのオープンソースUIフレームワークです。iOSやAndroid、Webのアプリケーションを1つのコードベースで開発できます。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

0グッド

0クリップ

投稿2017/03/13 00:50

編集2017/03/14 03:28

実現したいこと

auth0でgoogle認証で成功した後、Auth0のRulesでエラーになった場合に、エラーメッセージをURL Fragment(Hash)から取得せず、Auth0のBasic認証とどうようにコールバック関数で処理したい。

また、URLにはfragmentをつけないようにしたい。

なお、スマホのブラウザで利用することを想定して、redirectで利用。

現状

google認証成功後、auth0側のUsersにはユーザーが登録されている。
しかし、リダイレクト後の画面では、URL Fragmentにエラーコードがはいっており、window.location.hashで取得してエラーハンドリングしている。
(一方で、Basic認証の場合は、callback関数で処理しており、エラー時の処理が分散している。また、この場合はエラー時もFragmentは空)

Auth0-jsを使用していますが、同じことができればLockでも可です。

Rulesの例

初めてのログインの場合にエラーとする。(サインアップ(=利用規約への同意)を促すため)

javascript

1function (user, context, callback) { 2 user.app_metadata = user.app_metadata || {}; 3 4 // short-circuit if the user signed up already 5 if (user.app_metadata.signed_up) { 6 return callback(null, user, context); 7 } 8 9 return callback(new UnauthorizedError('user_not_exist'));

エラー時のURL(google-oauth2でエラーになった場合)

http://localhost:8100/?error=unauthorized&error_description=user_not_exist#

Angular側のauth.service.ts

typescript

1 loginWithGoogle(): void { 2 this.auth0.authorize({ 3 connection: "google-oauth2", 4 }); 5 }

Angular側のhome.component.ts

※ redirect先のcomponent

typescript

1IonViewWillEnter() { 2 const fragment = window.location.hash; 3 // エラー処理... 4}

Bascic認証の場合(参考): auth.service.ts

typescript

1this.auth0.client.login({ 2 realm: 'Username-Password-Authentication', 3 ,,, 4}, (err, authResult) => { 5 // エラー処理 6});

エラー時のURL(参考): Basic認証

※ Fragment/Hashはなし

http://localhost:8100

利用パッケージ

  • Ionic 2 (Webとして使用)
  • Angular 2
  • auth0-js(ver8.3)・・・redirectを使用。なお、lockは未利用

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

そもそもsignupとloginが、basic/oauth2のそれぞれでどのような挙動になるかでエラー、正常時の制御の仕方が変わる
signup時だとそもそもrulesが起動されないため、auto_login: trueとするか、loginメソッドを起動してrulesを動かすようにするなどの工夫が必要

投稿2017/04/04 22:20

stvrz2

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問