6-5. 로그인 구현하기
로그인을 구현 할 때에는, 폼 검증을 거치지 않기 때문에 금방 완성을 할 수 있습니다. 이번 섹션에서 해야 할 작업은, 로그인 실패시 오류를 띄우는것과, 로그인 성공시 회원가입 때 했었던 것 처럼 스토리지와 스토어에 유저정보를 담아주는 것 입니다.
src/containers/Auth/Login.js
import React, { Component } from 'react';
import { AuthContent, InputWithLabel, AuthButton, RightAlignedLink, AuthError } from 'components/Auth';
import { connect } from 'react-redux';
import {bindActionCreators} from 'redux';
import * as authActions from 'redux/modules/auth';
import * as userActions from 'redux/modules/user';
import storage from 'lib/storage';
class Login extends Component {
handleChange = (e) => {
const { AuthActions } = this.props;
const { name, value } = e.target;
AuthActions.changeInput({
name,
value,
form: 'login'
});
}
componentWillUnmount() {
const { AuthActions } = this.props;
AuthActions.initializeForm('login')
}
setError = (message) => {
const { AuthActions } = this.props;
AuthActions.setError({
form: 'login',
message
});
return false;
}
handleLocalLogin = async () => {
const { form, AuthActions, UserActions, history } = this.props;
const { email, password } = form.toJS();
try {
await AuthActions.localLogin({email, password});
const loggedInfo = this.props.result.toJS();
UserActions.setLoggedInfo(loggedInfo);
history.push('/');
storage.set('loggedInfo', loggedInfo);
} catch (e) {
console.log('a');
this.setError('잘못된 계정정보입니다.');
}
}
render() {
const { email, password } = this.props.form.toJS(); // form 에서 email 과 password 값을 읽어옴
const { handleChange, handleLocalLogin } = this;
const { error } = this.props;
return (
<AuthContent title="로그인">
<InputWithLabel
label="이메일"
name="email"
placeholder="이메일"
value={email}
onChange={handleChange}
/>
<InputWithLabel
label="비밀번호"
name="password"
placeholder="비밀번호"
type="password"
value={password}
onChange={handleChange}
/>
{
error && <AuthError>{error}</AuthError>
}
<AuthButton onClick={handleLocalLogin}>로그인</AuthButton>
<RightAlignedLink to="/auth/register">회원가입</RightAlignedLink>
</AuthContent>
);
}
}
export default connect(
(state) => ({
form: state.auth.getIn(['login', 'form']),
error: state.auth.getIn(['login', 'error']),
result: state.auth.get('result')
}),
(dispatch) => ({
AuthActions: bindActionCreators(authActions, dispatch),
UserActions: bindActionCreators(userActions, dispatch)
})
)(Login);