개발일기/Project
9. Spring boot + React Native + MongoDB - 로그인, 로그아웃 구현
길동이이이잉
2024. 6. 17. 00:02
728x90
반응형
자, 이제 로그인을 해보자
frontend
Login.js
import React, {useEffect, useState} from "react";
import {StyleSheet, Text, View, TextInput, Image, Button} from 'react-native';
import axios from "axios";
function Login({navigation}) {
const [userId, onChangeUserId] = React.useState('');
const [pw, onChangePw] = React.useState('');
const baseUrl = "http://localhost:8080/";
const handleKeyPress = e => { //비밀번호를 입력한 뒤 엔터키 누르면 로그인 진행
if (e.key === 'Enter') {
onPressLogin()
}
}
const onPressLogin = () => {
axios.post(baseUrl + "login", {
userId: userId,
pw: pw
})
.then((res) => {
console.log("data : ", res.data)
console.log("data : ", res.data.userId)
if (res.data.userId === userId) {
navigation.navigate('Main', {
userId: userId,
pw: pw,
})
} else {
alert("로그인 정보를 다시 확인해주세요.")
}
})
.catch((err) => console.log(err))
}
return (
<View style={styles.container}>
<ul>
{data}
</ul>
<Image
source={{uri: "https://search.pstatic.net/common/?src=http%3A%2F%2Fblogfiles.naver.net%2FMjAyMzEyMzBfMTA1%2FMDAxNzAzOTM0MDE4MTY5.EnQ_Al65sMhrNYFcEunuOIcZD7d_xpXnDhFYsl5k5aog.eHUbc0WA3A0QM0oVp3qLNpNXdDvXYR5I9WKOzDGjrnQg.JPEG.pooh_sk1012%2F%25B9%25D9%25C5%25C1%25C8%25AD%25B8%25E9_%25C0%25CC%25B7%25B9%25B5%25F0%25C0%25DA%25C0%25CE_%25B4%25DE%25B7%25C2_2560x1600.jpg&type=a340"}}
style={{width: 600, height: 300, borderRadius: 30}}
/>
<Text style={styles.title}> Calendar </Text>
<TextInput
placeholder='Id'
style={styles.input}
onChangeText={onChangeUserId}
/>
<TextInput
placeholder='Password'
style={styles.input}
onChangeText={onChangePw}
secureTextEntry={true}
keyboardType="numeric"
onKeyPress={handleKeyPress}
/>
<View style={styles.button}>
<Button
color={'#e2d2c1'}
textStyle={{textAlign: 'center', font: 40}}
title={`Login`}
onPress={onPressLogin}
/>
</View>
<View style={styles.button}>
<Button
color={'#e2d2c1'}
textStyle={{textAlign: 'center', font: 40}}
title={`회원가입`}
onPress={() => navigation.navigate('Join')}
/>
</View>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
title: {
fontSize: 30,
},
input: {
height: 40,
margin: 12,
borderWidth: 1,
padding: 10,
},
button: {
width: 170,
height: 40,
margin: 12,
padding: 10,
}
});
export default Login;
backend
LoginRequest.java 파일을 model/Request 폴더에 생성해주었다.
package com.calender.calenderproject_backend.model.Request;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class LoginRequest {
String userId;
String pw;
}
MemberRepository
package com.calender.calenderproject_backend.repository;
import com.calender.calenderproject_backend.model.Member;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface MemberRepository extends MongoRepository<Member, String> {
...
Member findMemberByUserIdAndPw(String userId, String pw);
}
MemberService
...
public Member login(String userId, String pw){
return memberRepository.findMemberByUserIdAndPw(userId, pw);
}
...
MemberController
....
@PostMapping("/login")
public ResponseEntity<?> memberLogin(@RequestBody LoginRequest request){
System.out.println("User login: " + request.getUserId());
return ResponseEntity.ok(memberService.login(request.getUserId(), request.getPw()));
}
.....
이제 세션 유지와 로그아웃을 추가해야하는데...
큰일났다...
컴퓨터가 너무 오래된 아이라.... 자꾸 멈춘다... 앞으로 어떡하지...?
* 몽고 디비 쿼리 참고
https://steemit.com/kr-dev/@kormanocorp/spring-boot-mongodb-query
728x90
반응형