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

質問編集履歴

6

編集。

2019/11/29 09:00

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,17 +1,5 @@
1
1
  CognitoのユーザープールにSignUpしているユーザーに対して、Facebookなどのidp認証を紐づけることは可能でしょうか?
2
- 実現したいことは下記です。
3
- - ユーザープールにユーザーAを電話番号でSignUpさせる(その後CONFIRMED状態になっているとします)
4
- - ユーザーAはFacebook認証を行い、その後はFacebookへ投稿、Facebookを用いたログインが行える
5
-
6
- Facebook認証的なボタンをマイページなどに設置し、クリックするとアカウントとFacebookが紐づくようなイメージです。
7
-
8
- 今の所はFacebookによるOAuth認証までは終えていて、その後帰ってきたトークンをどのようにCognitoへ登録すれば良いのかわからずです・・。
9
-
10
- federatedSignIn関数を用いて認証を行おうとしましたが既に登録されているメールアドレス的なエラーになってしまいます...。根本的に考え方間違っていますかね...
11
-
12
- 何か方法はありますでしょうか。ご教授のほどお願い申し上げます。
13
-
14
- **実現したいことのまとめ**
2
+ **実現したいこと**
15
3
  - ユーザープールへ電話番号認証でサインアップしておく
16
4
  - OAuthでIDPへ認証処理
17
5
  - ログイン済みのユーザーへIDPアカウントを紐付ける(投稿連携、シングルサインオンできるなど)

5

実現したいことのまとめを追記。

2019/11/29 09:00

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -11,6 +11,11 @@
11
11
 
12
12
  何か方法はありますでしょうか。ご教授のほどお願い申し上げます。
13
13
 
14
+ **実現したいことのまとめ**
15
+ - ユーザープールへ電話番号認証でサインアップしておく
16
+ - OAuthでIDPへ認証処理
17
+ - ログイン済みのユーザーへIDPアカウントを紐付ける(投稿連携、シングルサインオンできるなど)
18
+
14
19
  **FacebookへのOAuth処理**
15
20
  ```javascript
16
21
  import {Auth} from 'aws-amplify'

4

エラー内容を追記。

2019/11/29 08:59

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -19,7 +19,7 @@
19
19
  return new Promise(resolve => {
20
20
  window.fbAsyncInit = function () {
21
21
  FB.init({
22
- appId: 'XXXXXX', // ToDo: 環境変数などから取得すること
22
+ appId: 'XXXXXX',
23
23
  cookie: true,
24
24
  xfbml: true,
25
25
  version: 'v2.11'
@@ -71,4 +71,10 @@
71
71
  if (!window.FB) await createScript();
72
72
  signIn();
73
73
  }
74
+ ```
75
+
76
+ エラー内容(ブラウザのコンソールログより)
77
+ ```console
78
+ AuthClass - There is already a signed in user: {"id":"ap-northeast-1:XXXXX-XXXX-XXXX-XXXX-XXXXX","name":"user name","email":"user@example.com"} in your app.
79
+ You should not call Auth.federatedSignIn method again as it may cause unexpected behavior.
74
80
  ```

3

エラー個所追記

2019/11/29 07:17

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -43,7 +43,7 @@
43
43
  name: response.name,
44
44
  email: response.email
45
45
  };
46
- await Auth.federatedSignIn(
46
+ await Auth.federatedSignIn( // ここが疎通せず、Cognitoへも何も反映されません。この関数は使い方間違っていますでしょうか?
47
47
  "facebook",
48
48
  {token: accessToken, expires_at},
49
49
  user

2

リライト

2019/11/28 13:36

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -4,11 +4,14 @@
4
4
  - ユーザーAはFacebook認証を行い、その後はFacebookへ投稿、Facebookを用いたログインが行える
5
5
 
6
6
  Facebook認証的なボタンをマイページなどに設置し、クリックするとアカウントとFacebookが紐づくようなイメージです。
7
- 今の所はFacebookによるOAuth認証までは終えていて、その後帰ってきたトークンをどのようにCognitoへ登録すれば良いのかわからずです・・。federatedSignIn関数を用いて認証を行おうとしましたが既に登録されているメールアドレス的なエラーになってしまいます...。根本的に考え方間違っていますかね...
8
7
 
8
+ 今の所はFacebookによるOAuth認証までは終えていて、その後帰ってきたトークンをどのようにCognitoへ登録すれば良いのかわからずです・・。
9
+
10
+ federatedSignIn関数を用いて認証を行おうとしましたが既に登録されているメールアドレス的なエラーになってしまいます...。根本的に考え方間違っていますかね...
11
+
9
12
  何か方法はありますでしょうか。ご教授のほどお願い申し上げます。
10
13
 
11
- FacebookへのOAuth処理
14
+ **FacebookへのOAuth処理**
12
15
  ```javascript
13
16
  import {Auth} from 'aws-amplify'
14
17
  async function facebookAuth() {
@@ -36,19 +39,15 @@
36
39
  if (!accessToken) return;
37
40
  const fb = window.FB;
38
41
  fb.api('/me', {fields: 'name,email'}, async response => {
39
- const user = {
42
+ const user = { // emailとnameは取得できています
40
43
  name: response.name,
41
44
  email: response.email
42
45
  };
43
- try {
44
- await Auth.federatedSignIn(
46
+ await Auth.federatedSignIn(
45
- "facebook",
47
+ "facebook",
46
- {token: accessToken, expires_at},
48
+ {token: accessToken, expires_at},
47
- user
49
+ user
48
- );
50
+ );
49
- } catch (e) {
50
- // ToDo: Error case :CognitoのUserPoolへのフェデレーションID登録失敗
51
- }
52
51
  });
53
52
  }
54
53
  const signIn = () => {

1

まずいコード乗っています!!!

2019/11/28 13:27

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -16,7 +16,7 @@
16
16
  return new Promise(resolve => {
17
17
  window.fbAsyncInit = function () {
18
18
  FB.init({
19
- appId: '792764777860322', // ToDo: 環境変数などから取得すること
19
+ appId: 'XXXXXX', // ToDo: 環境変数などから取得すること
20
20
  cookie: true,
21
21
  xfbml: true,
22
22
  version: 'v2.11'