質問編集履歴
7
誤字
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Node.jsでJWTを使ったログイン機能を実装しています。ポストマンを使ってリクエストヘッダのAuthorizationに発行されたトークンを手入力し、APIを動作させることはできたのですが、ログインと同時に自動でリクエストヘッダにトークンを設定する方法がわかりません。
|
1
|
+
Node.jsでJWTを使ったログイン機能を実装しています。ポストマンを使ってリクエストヘッダのAuthorizationに発行されたトークンを手入力し、APIを動作させることはできたのですが、ログインと同時に自動でリクエストヘッダにトークンを設定する方法がわかりません。どなたかご教授いただけますと幸いです。
|
2
2
|
|
3
3
|
|
4
4
|
|
6
追記
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
タイトルの変更
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
リクエストヘッダのAuthorizationにトークンを設定する方法
|
1
|
+
JWT認証でリクエストヘッダのAuthorizationにトークンを設定する方法
|
test
CHANGED
File without changes
|
4
コードの変更
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
コードの変更
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
追記
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
コードの追加
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
|
```
|