API Routes,インプリメンテーションログイン(next.js)
結果
内容
API = isLogin, login, logout
Page = admin, Login
その後logoutボタンをクリックし、logotapiを呼び出してCookieを削除し、ホームページ
コード#コード#
//src/top.js
export default function top () {
const router = useRouter();
const goLink = data => {
if(data === 'admin')
router.push('/admin')}
return(
<div>
<button name='admin' onClick={() => goLink('admin')}>admin</button>
</div>
)
}
//pages/admin.js
const admin = () => {
const router = useRouter();
const[isLogin, setIsLogin] = useState(false)
const checkLogin = () => {
axios.get('/api/isLogin')
.then(res => {
if(res.status === 200 && res.data.name)
setIsLogin(true)
else
router.push('/Login')
})}
const logout = () => {
axios.get('/api/logout')
.then(res => {
if(res.status === 200 )
router.push('/')
})}
useEffect(() => {
checkLogin();
},[]);
return(
<div>
<p>admin page</p>
{isLogin && <button onClick={logout}>Logout</button>}
</div>
)}
//pages/Login.js
export default function Login() {
const router = useRouter();
//api/login으로 post로 내용 보내기
const login = () => {
axios.post('api/login')
.then(res => {
if(res.status === 200)
router.push('/admin');
})}
return(
<div>
<input placeholder="id"/>
<input placeholder="pw" type='password'/>
<button onClick={login}>Login</button>
</div>
)}
//pages/api/isLogin.js
export default function isLogin(req, res) {
res.status(200).json({ name: req.cookies.a_name })}
//pages/api/login.js
export default (req, res) => {
if(req.method === 'POST')
res.setHeader('Set-Cookie', 'a_name=Mike;Max-Age=3600;HttpOnly,Secure')
res.statusCode = 200;
res.json({ message:'ok'})
}
//pages/api/login.js
export default (req, res) => {
//max-age가 0이 되면 쿠기는 소멸됨
res.setHeader('Set-Cookie', 'a_name=Mike;Max-Age=0;HttpOnly,Secure')
res.statusCode = 200;
res.json({ message:'ok'})
}
Reference
この問題について(API Routes,インプリメンテーションログイン(next.js)), 我々は、より多くの情報をここで見つけました https://velog.io/@suminllll/API-Routes-로그인-구현Next.jsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol