teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

内容を修正

2017/03/14 03:28

投稿

stvrz2
stvrz2

スコア7

title CHANGED
@@ -1,1 +1,1 @@
1
- auth0でgoogle認証成功後にrulesでエラーになった場合にUsersに登録しないようにする方法
1
+ auth0のRulesのエラーハンドリングの方法
body CHANGED
@@ -1,17 +1,17 @@
1
1
  # 実現したいこと
2
- auth0でgoogle認証で成功した後、Auth0のRulesでエラーになった場合は、auth0登録しないようにしたい。
2
+ auth0でgoogle認証で成功した後、Auth0のRulesでエラーになった場合に、エラーメッセージをURL Fragment(Hash)から取得せず、Auth0のBasic認証とどうようにコールバック関数で処理したい。
3
3
 
4
- もしくは、Rulesで失敗しことをAuth0のUsers情報せた
4
+ 、URLはfragmentつけないようにしたい
5
5
 
6
+ なお、スマホのブラウザで利用することを想定して、redirectで利用。
7
+
6
8
  # 現状
7
9
  google認証成功後、auth0側のUsersにはユーザーが登録されている。
8
- しかし、リダイレクト後の画面では、URLのサーチパラメータにエラーメッセアペンドされた状態。(できれば、auth0側に登録ようにしたい)
10
+ しかし、リダイレクト後の画面では、URL Fragmentにエラーはいっており、window.location.hashで取得してエラーハンドリング
11
+ (一方で、Basic認証の場合は、callback関数で処理しており、エラー時の処理が分散している。また、この場合はエラー時もFragmentは空)
9
12
 
10
- component側のエラーハンドリングで、auth0.users.deleteするかなしょうか
13
+ Auth0-jsを使用ますが、同じことがきればLockでも可です
11
- そうだとしても、Basic認証のように、`webAuth.client.login(...., callback)`のように、callbackでエラー処理したいところですが、google認証などのOauth2認証ではauthorizeメソッドがcallbackを取れないので、basic認証のように処理できず困っています。。
12
14
 
13
-
14
-
15
15
  # Rulesの例
16
16
  初めてのログインの場合にエラーとする。(サインアップ(=利用規約への同意)を促すため)
17
17
 
@@ -24,9 +24,14 @@
24
24
  return callback(null, user, context);
25
25
  }
26
26
 
27
- return callback(new UnauthorizedError('User Not Exist!!!'));
27
+ return callback(new UnauthorizedError('user_not_exist'));
28
28
  ```
29
29
 
30
+ # エラー時のURL(google-oauth2でエラーになった場合)
31
+ ```
32
+ http://localhost:8100/?error=unauthorized&error_description=user_not_exist#
33
+ ```
34
+
30
35
  # Angular側のauth.service.ts
31
36
  ```typescript
32
37
  loginWithGoogle(): void {
@@ -40,16 +45,30 @@
40
45
  ※ redirect先のcomponent
41
46
  ```typescript
42
47
  IonViewWillEnter() {
43
- const searchParam = window.location.search;
48
+ const fragment = window.location.hash;
44
- // エラー時の処理が続く
49
+ // エラー処理...
45
- // rulesでエラーでも、このタイミングでauth0のusersには登録されている状態になる
46
50
  }
47
51
  ```
48
52
 
53
+ # Bascic認証の場合(参考): auth.service.ts
54
+ ```typescript
55
+ this.auth0.client.login({
56
+ realm: 'Username-Password-Authentication',
57
+ ,,,
58
+ }, (err, authResult) => {
59
+ // エラー処理
60
+ });
61
+ ```
49
62
 
63
+ # エラー時のURL(参考): Basic認証
64
+ ※ Fragment/Hashはなし
65
+ ```
66
+ http://localhost:8100
67
+ ```
50
68
 
51
69
 
70
+
52
71
  # 利用パッケージ
53
- - Ionic 2
72
+ - Ionic 2 (Webとして使用)
54
73
  - Angular 2
55
74
  - auth0-js(ver8.3)・・・redirectを使用。なお、lockは未利用