質問編集履歴

2

一部解決しました

2021/05/26 20:00

投稿

ryo24
ryo24

スコア0

test CHANGED
File without changes
test CHANGED
@@ -1,8 +1,4 @@
1
1
  ### 前提・実現したいこと
2
-
3
- Next.jsにてdjango-allauthを用いて、ソーシャルログインを実装したい
4
-
5
- 認証はToken認証ではなく、session認証(cookie)にて実装したいです。
6
2
 
7
3
 
8
4
 
@@ -10,252 +6,8 @@
10
6
 
11
7
 
12
8
 
13
- Docker上にてフロントはNext.js(127.0.0.1:3000)、バックエンドはDjango(127.0.0.1:8000)で開発を行っています。
14
-
15
- ソーシャルログインを実装するにあたり、django-allauthを用いてtwitter認証(http://127.0.0.1:8000/accounts/twitter/login/)を試みようとしています。
16
-
17
- 今回Session認証を採用したいため、ひとまず127.0.0.1:3000でProxy(Express+http-proxy-middleware)を通して、twitterの認証画面を呼ぼうとするのですが、以下エラーが出て認証画面が出ないことが多々あります。(たまに意図通り認証画面を呼べたりする)
18
-
19
-
20
-
21
- http://127.0.0.1:3000/accounts/twitter/login/
22
-
23
- ↓  ↑
24
-
25
- Proxy(Express+http-proxy-middleware)
26
-
27
- ↓  ↑
28
-
29
- http://127.0.0.1:8000/accounts/twitter/login/(Django-allauth)
30
-
31
- ↓  ↑★
32
-
33
- twitter
34
-
35
-
36
-
37
- ・django-allauthのエラーが返ってきているので、127.0.0.1:3000→127.0.0.1:8000は(ひとまず)できてる
38
-
39
- ・Next.js(http://127.0.0.1:3000)を経由せず直接http://127.0.0.1:8000/accounts/twitter/login/を叩くと、認証画面が返ってくる
40
-
41
- ・django-allauthのソースコードをざっと見る限り、エラーの場合はtwitterからのレスポンス(★)が正常ではないため、エラーが出ているっぽい
42
-
43
- ので、http://127.0.0.1:3000から叩くにあたり、ほかに気づいていない問題点があると予想しているのですが、原因がわかっていません。
44
-
45
- 解決策等わかる方いらっしゃったらご教授いただきたいです。
46
-
47
-
48
-
49
- ```
50
-
51
- {'provider': 'twitter', 'code': 'unknown', 'exception': OAuthError('不正なレスポンスが返されたため、 "api.twitter.com" からリクエストトークンを取得できませんでした。')}
52
-
53
- ```
54
-
55
-
56
-
57
9
  ### 該当のソースコード
58
-
59
- ```
60
-
61
- ■next.js
62
-
63
- export default function SignIn(){
64
-
65
- return(
66
-
67
- ---略---
68
-
69
- <form>
70
-
71
- <Button
72
-
73
- href={http://127.0.0.1:3000/accounts/twitter/login/}
74
-
75
- >
76
-
77
- twitterでログイン
78
-
79
- </Button>
80
-
81
- </form>
82
-
83
- )
84
-
85
- }
86
-
87
- ```
88
-
89
-
90
-
91
- ```
92
-
93
- ■server.js
94
-
95
- const express = require('express')
96
-
97
- const next = require('next')
98
-
99
- const { createProxyMiddleware } = require('http-proxy-middleware')
100
-
101
-
102
-
103
- const port = parseInt(process.env.PORT, 10) || 3000
104
-
105
- const dev = process.env.NODE_ENV !== 'production'
106
-
107
- const app = next({ dev })
108
-
109
- const handle = app.getRequestHandler()
110
-
111
-
112
-
113
- app.prepare().then(() => {
114
-
115
- const server = express()
116
-
117
-
118
-
119
- server.use('/accounts/twitter',createProxyMiddleware({
120
-
121
- target: 'http://backend:8000/', //dockerにあわせて127.0.0.1→backendに変更
122
-
123
- changeOrigin: true
124
-
125
- })
126
-
127
- );
128
-
129
-
130
-
131
- server.all('*', (req, res) => {
132
-
133
- return handle(req, res)
134
-
135
- })
136
-
137
-
138
-
139
- server.listen(port, err => {
140
-
141
- if (err) throw err
142
-
143
- console.log(`> Ready on http://localhost:${port}`)
144
-
145
- })
146
-
147
- })
148
-
149
- ```
150
-
151
-
152
-
153
- ```
154
-
155
- ■docker-compose.yml
156
-
157
- version: '3'
158
-
159
- services:
160
-
161
- db:
162
-
163
- container_name: postgresql
164
-
165
- image: postgres:11.2
166
-
167
- volumes:
168
-
169
- - django_data_volume:/var/lib/postgresql/data
170
-
171
- environment:
172
-
173
- POSTGRES_USER: postgres
174
-
175
- POSTGRES_PASSWORD: postgres
176
-
177
- POSTGRES_DB: test_db
178
-
179
- ports:
180
-
181
- - '5432:5432'
182
-
183
- backend:
184
-
185
- container_name: django-restapi
186
-
187
- build:
188
-
189
- context: ./
190
-
191
- dockerfile: dockerfilePython
192
-
193
- volumes:
194
-
195
- - ./django-restapi:/code
196
-
197
- command: sh -c "python test_app/manage.py runserver 0:8000"
198
-
199
- ports:
200
-
201
- - "8000:8000"
202
-
203
- depends_on:
204
-
205
- - db
206
-
207
- frontend:
208
-
209
- container_name: next.js
210
-
211
- build:
212
-
213
- context: ./
214
-
215
- dockerfile: dockerfileNode
216
-
217
- volumes:
218
-
219
- - ./my-app:/code:cached
220
-
221
- - /code/node_modules
222
-
223
- command: sh -c "npm run dev"
224
-
225
- ports:
226
-
227
- - "3000:3000"
228
-
229
- depends_on:
230
-
231
- - backend
232
-
233
- volumes:
234
-
235
- django_data_volume:
236
-
237
- ```
238
10
 
239
11
 
240
12
 
241
13
  ### 補足情報(FW/ツールのバージョンなど)
242
-
243
- 環境は以下です。
244
-
245
- ・Windows10 Pro(WSL2)
246
-
247
- ・Docker Desktop
248
-
249
- ・images&FW etc
250
-
251
- node:14.15.1-alpine3.10
252
-
253
- next.js;10.2.0
254
-
255
- express: 4.17.1,
256
-
257
- python:3.7
258
-
259
- Django:2.1.7
260
-
261
- django-allauth; 0.44.0

1

2021/05/26 20:00

投稿

ryo24
ryo24

スコア0

test CHANGED
File without changes
test CHANGED
@@ -56,7 +56,9 @@
56
56
 
57
57
  ### 該当のソースコード
58
58
 
59
+ ```
60
+
59
- ```next.js
61
+ next.js
60
62
 
61
63
  export default function SignIn(){
62
64
 
@@ -86,7 +88,9 @@
86
88
 
87
89
 
88
90
 
91
+ ```
92
+
89
- ```server.js
93
+ server.js
90
94
 
91
95
  const express = require('express')
92
96
 
@@ -146,7 +150,9 @@
146
150
 
147
151
 
148
152
 
153
+ ```
154
+
149
- ```docker-compose.yml
155
+ docker-compose.yml
150
156
 
151
157
  version: '3'
152
158