Spring + RESTful + JWTへReactからログインする。
Login.js
x
51
51
1
import React, { useState } from 'react';
2
import Hello from './Hello';
3
4
const Login = () => {
5
const [user, setUser] = useState({username: '', password: ''});
6
const [isAuthenticated, setAuth] = useState(false);
7
8
const handleChange = (event) => {
9
setUser({user, [event.target.name] : event.target.value})
10
}
11
12
const login = () => {
13
fetch("http://localhost:8080/login",
14
{
15
method : "POST",
16
headers : {
17
'Content-Type' : 'application/json'
18
},
19
body: JSON.stringify(user)
20
})
21
.then(response => response.json())
22
.then(responseJSON => {
23
const jwttoken = responseJSON.token;
24
if (jwttoken !== null) {
25
sessionStorage.setItem("jwttoken", jwttoken);
26
setAuth(true);
27
}
28
})
29
.catch(error => console.error(error))
30
}
31
32
if (isAuthenticated) {
33
return(
34
<div>
35
<Hello />
36
</div>
37
);
38
}
39
else {
40
return(
41
<div>
42
<input type="text" name="username" onChange={handleChange} /><br />
43
<input type="password" name="password" onChange={handleChange} /><br />
44
<button onClick={login}>Login</button>
45
</div>
46
);
47
}
48
49
}
50
51
export default Login;
Hello.js
1
54
54
1
import React, { useLayoutEffect, useState } from 'react';
2
import Login from './Login';
3
4
const Hello = () => {
5
const [greeting, setGreeting] = useState("");
6
const [isAuthenticated, setAuth] = useState(false);
7
8
useLayoutEffect(() => {
9
hello();
10
});
11
12
const hello = () => {
13
const jwttoken = sessionStorage.getItem("jwttoken");
14
fetch("http://localhost:8080/hello",
15
{
16
method : "POST",
17
headers : {
18
'Authorization' : 'Bearer ' + jwttoken
19
},
20
})
21
.then(response => {
22
if (response.status === 200) {
23
setAuth(true);
24
return response.json();
25
}
26
sessionStorage.setItem("jwttoken", "");
27
setAuth(false);
28
return null;
29
})
30
.then(responseJSON => {
31
if (responseJSON) {
32
setGreeting(responseJSON.greeting);
33
}
34
})
35
.catch(error => console.error(error))
36
}
37
38
if (isAuthenticated) {
39
return(
40
<div>
41
From Server : {greeting}
42
</div>
43
);
44
}
45
else {
46
return(
47
<div>
48
<Login />
49
</div>
50
);
51
}
52
}
53
54
export default Hello;