質問編集履歴
1
内容を修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
auth0
|
1
|
+
auth0のRulesのエラーハンドリングの方法
|
test
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
# 実現したいこと
|
2
2
|
|
3
|
-
auth0でgoogle認証で成功した後、Auth0のRulesでエラーになった場合
|
3
|
+
auth0でgoogle認証で成功した後、Auth0のRulesでエラーになった場合に、エラーメッセージをURL Fragment(Hash)から取得せず、Auth0のBasic認証とどうようにコールバック関数で処理したい。
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
+
また、URLにはfragmentをつけないようにしたい。
|
8
|
+
|
9
|
+
|
10
|
+
|
7
|
-
|
11
|
+
なお、スマホのブラウザで利用することを想定して、redirectで利用。
|
8
12
|
|
9
13
|
|
10
14
|
|
@@ -12,17 +16,13 @@
|
|
12
16
|
|
13
17
|
google認証成功後、auth0側のUsersにはユーザーが登録されている。
|
14
18
|
|
15
|
-
しかし、リダイレクト後の画面では、URL
|
19
|
+
しかし、リダイレクト後の画面では、URL Fragmentにエラーコードがはいっており、window.location.hashで取得してエラーハンドリングしている。
|
20
|
+
|
21
|
+
(一方で、Basic認証の場合は、callback関数で処理しており、エラー時の処理が分散している。また、この場合はエラー時もFragmentは空)
|
16
22
|
|
17
23
|
|
18
24
|
|
19
|
-
|
25
|
+
Auth0-jsを使用していますが、同じことができればLockでも可です。
|
20
|
-
|
21
|
-
そうだとしても、Basic認証のように、`webAuth.client.login(...., callback)`のように、callbackでエラー処理したいところですが、google認証などのOauth2認証ではauthorizeメソッドがcallbackを取れないので、basic認証のように処理できず困っています。。
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
26
|
|
27
27
|
|
28
28
|
|
@@ -50,7 +50,17 @@
|
|
50
50
|
|
51
51
|
|
52
52
|
|
53
|
-
return callback(new UnauthorizedError('
|
53
|
+
return callback(new UnauthorizedError('user_not_exist'));
|
54
|
+
|
55
|
+
```
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
# エラー時のURL(google-oauth2でエラーになった場合)
|
60
|
+
|
61
|
+
```
|
62
|
+
|
63
|
+
http://localhost:8100/?error=unauthorized&error_description=user_not_exist#
|
54
64
|
|
55
65
|
```
|
56
66
|
|
@@ -82,13 +92,43 @@
|
|
82
92
|
|
83
93
|
IonViewWillEnter() {
|
84
94
|
|
85
|
-
const
|
95
|
+
const fragment = window.location.hash;
|
86
96
|
|
87
|
-
// エラー
|
97
|
+
// エラー処理...
|
88
|
-
|
89
|
-
// rulesでエラーでも、このタイミングでauth0のusersには登録されている状態になる
|
90
98
|
|
91
99
|
}
|
100
|
+
|
101
|
+
```
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
# Bascic認証の場合(参考): auth.service.ts
|
106
|
+
|
107
|
+
```typescript
|
108
|
+
|
109
|
+
this.auth0.client.login({
|
110
|
+
|
111
|
+
realm: 'Username-Password-Authentication',
|
112
|
+
|
113
|
+
,,,
|
114
|
+
|
115
|
+
}, (err, authResult) => {
|
116
|
+
|
117
|
+
// エラー処理
|
118
|
+
|
119
|
+
});
|
120
|
+
|
121
|
+
```
|
122
|
+
|
123
|
+
|
124
|
+
|
125
|
+
# エラー時のURL(参考): Basic認証
|
126
|
+
|
127
|
+
※ Fragment/Hashはなし
|
128
|
+
|
129
|
+
```
|
130
|
+
|
131
|
+
http://localhost:8100
|
92
132
|
|
93
133
|
```
|
94
134
|
|
@@ -98,11 +138,9 @@
|
|
98
138
|
|
99
139
|
|
100
140
|
|
101
|
-
|
102
|
-
|
103
141
|
# 利用パッケージ
|
104
142
|
|
105
|
-
- Ionic 2
|
143
|
+
- Ionic 2 (Webとして使用)
|
106
144
|
|
107
145
|
- Angular 2
|
108
146
|
|