質問編集履歴
1
内容を修正
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
auth0
|
1
|
+
auth0のRulesのエラーハンドリングの方法
|
body
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
# 実現したいこと
|
2
|
-
auth0でgoogle認証で成功した後、Auth0のRulesでエラーになった場合
|
2
|
+
auth0でgoogle認証で成功した後、Auth0のRulesでエラーになった場合に、エラーメッセージをURL Fragment(Hash)から取得せず、Auth0のBasic認証とどうようにコールバック関数で処理したい。
|
3
3
|
|
4
|
-
|
4
|
+
また、URLにはfragmentをつけないようにしたい。
|
5
5
|
|
6
|
+
なお、スマホのブラウザで利用することを想定して、redirectで利用。
|
7
|
+
|
6
8
|
# 現状
|
7
9
|
google認証成功後、auth0側のUsersにはユーザーが登録されている。
|
8
|
-
しかし、リダイレクト後の画面では、URL
|
10
|
+
しかし、リダイレクト後の画面では、URL Fragmentにエラーコードがはいっており、window.location.hashで取得してエラーハンドリングしている。
|
11
|
+
(一方で、Basic認証の場合は、callback関数で処理しており、エラー時の処理が分散している。また、この場合はエラー時もFragmentは空)
|
9
12
|
|
10
|
-
|
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('
|
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
|
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は未利用
|