質問編集履歴

7

誤字

2020/07/29 15:14

投稿

maskmelon
maskmelon

スコア63

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- Node.jsでJWTを使ったログイン機能を実装しています。ポストマンを使ってリクエストヘッダのAuthorizationに発行されたトークンを手入力し、APIを動作させることはできたのですが、ログインと同時に自動でリクエストヘッダにトークンを設定する方法がわかりません。つまり、req.userご教授いただけますと幸いです。
1
+ Node.jsでJWTを使ったログイン機能を実装しています。ポストマンを使ってリクエストヘッダのAuthorizationに発行されたトークンを手入力し、APIを動作させることはできたのですが、ログインと同時に自動でリクエストヘッダにトークンを設定する方法がわかりません。どなたかご教授いただけますと幸いです。
2
2
 
3
3
 
4
4
 

6

追記

2020/07/29 15:13

投稿

maskmelon
maskmelon

スコア63

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- Node.jsでJWTを使ったログイン機能を実装しています。ポストマンを使ってリクエストヘッダのAuthorizationに発行されたトークンを入力し、APIを機能させることはできたのですが、ログインと同時に自動でリクエストヘッダにトークンを設定する方法がわかりません。ご教授いただけますと幸いです。
1
+ Node.jsでJWTを使ったログイン機能を実装しています。ポストマンを使ってリクエストヘッダのAuthorizationに発行されたトークンを入力し、APIを動作させることはできたのですが、ログインと同時に自動でリクエストヘッダにトークンを設定する方法がわかりません。つまり、req.userご教授いただけますと幸いです。
2
2
 
3
3
 
4
4
 
@@ -199,3 +199,35 @@
199
199
 
200
200
 
201
201
  ```
202
+
203
+
204
+
205
+ ###追記
206
+
207
+ 具体的にいうと、
208
+
209
+
210
+
211
+ ```
212
+
213
+ router.post('/login', async (req, res) => {
214
+
215
+ try {
216
+
217
+ const user = await User.findByCredentials(req.body.name, req.body.password);
218
+
219
+ const token = await user.generateAuthToken();
220
+
221
+ res.send({ user, token });
222
+
223
+ } catch (e) {
224
+
225
+ res.status(400).send(e);
226
+
227
+ }
228
+
229
+ });
230
+
231
+ ```
232
+
233
+ ログイン時にサーバ側から返ってきた`token`をヘッダのAuthorizationの中に入れる方法が知りたいです。現状だと、ログインした後も`token`が返ってくるだけでログイン状態を維持することができません。

5

タイトルの変更

2020/07/29 15:13

投稿

maskmelon
maskmelon

スコア63

test CHANGED
@@ -1 +1 @@
1
- リクエストヘッダのAuthorizationにトークンを設定する方法
1
+ JWT認証でリクエストヘッダのAuthorizationにトークンを設定する方法
test CHANGED
File without changes

4

コードの変更

2020/07/29 15:00

投稿

maskmelon
maskmelon

スコア63

test CHANGED
File without changes
test CHANGED
@@ -10,8 +10,6 @@
10
10
 
11
11
  const jwt = require('jsonwebtoken');
12
12
 
13
- const bcrypt = require('bcryptjs');
14
-
15
13
 
16
14
 
17
15
  //ユーザーモデルのインスタンスに対してトークンを発行

3

コードの変更

2020/07/29 03:52

投稿

maskmelon
maskmelon

スコア63

test CHANGED
File without changes
test CHANGED
@@ -6,6 +6,14 @@
6
6
 
7
7
  ```Javascript
8
8
 
9
+ const mongoose = require('mongoose');
10
+
11
+ const jwt = require('jsonwebtoken');
12
+
13
+ const bcrypt = require('bcryptjs');
14
+
15
+
16
+
9
17
  //ユーザーモデルのインスタンスに対してトークンを発行
10
18
 
11
19
  userSchema.methods.generateAuthToken = async function () {
@@ -26,6 +34,14 @@
26
34
 
27
35
  };
28
36
 
37
+
38
+
39
+ const User = mongoose.model('User', userSchema);
40
+
41
+
42
+
43
+ module.exports = User;
44
+
29
45
  ```
30
46
 
31
47
 

2

追記

2020/07/29 03:52

投稿

maskmelon
maskmelon

スコア63

test CHANGED
File without changes
test CHANGED
@@ -32,13 +32,13 @@
32
32
 
33
33
  ```JavaScript
34
34
 
35
- //トークンを認証するミドルウェア
36
-
37
35
  const jwt = require('jsonwebtoken');
38
36
 
39
37
  const User = require('../models/user');
40
38
 
41
39
 
40
+
41
+ //トークンを認証するミドルウェア
42
42
 
43
43
  const auth = async (req, res, next) => {
44
44
 

1

コードの追加

2020/07/29 03:50

投稿

maskmelon
maskmelon

スコア63

test CHANGED
File without changes
test CHANGED
@@ -88,7 +88,89 @@
88
88
 
89
89
  ```JavaScript
90
90
 
91
+ const express = require('express');
92
+
93
+
94
+
95
+ const router = new express.Router();
96
+
97
+ const User = require('../models/user');
98
+
99
+ const auth = require('../middleware/auth');
100
+
101
+
102
+
103
+ //ユーザー作成時にトークンを発行
104
+
105
+ router.post('/createUser', async (req, res) => {
106
+
107
+ const user = new User(req.body);
108
+
109
+
110
+
111
+ try {
112
+
113
+ await user.save();
114
+
115
+ const token = await user.generateAuthToken();
116
+
117
+ res.status(201).send({ user, token });
118
+
119
+ } catch (e) {
120
+
121
+ res.status(400).send(e);
122
+
123
+ }
124
+
125
+ });
126
+
127
+
128
+
129
+ //ログイン時にトークンを発行
130
+
131
+ router.post('/login', async (req, res) => {
132
+
133
+ try {
134
+
135
+ const user = await User.findByCredentials(req.body.name, req.body.password);
136
+
137
+ const token = await user.generateAuthToken();
138
+
139
+ res.send({ user, token });
140
+
141
+ } catch (e) {
142
+
143
+ res.status(400).send(e);
144
+
145
+ }
146
+
147
+ });
148
+
149
+
150
+
151
+ //ログアウト時に認証
152
+
153
+ router.post('/logout', auth, async (req, res) => {
154
+
155
+ try {
156
+
157
+ req.user.tokens = req.user.tokens.filter((token) => token.token !== req.token);
158
+
159
+ await req.user.save();
160
+
161
+ res.send();
162
+
163
+ } catch (e) {
164
+
165
+ res.status(500).send();
166
+
167
+ }
168
+
169
+ });
170
+
171
+
172
+
91
- //ティングする際に認証
173
+ //ザー情報の取得時に認証
92
174
 
93
175
  router.get('/profile', auth, async (req, res) => {
94
176
 
@@ -98,4 +180,8 @@
98
180
 
99
181
 
100
182
 
183
+ module.exports = router;
184
+
185
+
186
+
101
187
  ```