[RN]ログインとJWT
20424 ワード
🖥 検証プロセスClient->サーバへの認証データの転送 サーバ->セッション検証データを格納し、セッションキーをクライアントに返す モバイルアプリケーションの場合
サーバがクライアントの認証を管理しない
トークンを使う!!!
1.モバイルapp->認証データの送信
2.サーバ->秘密鍵を作成し、トークンをモバイルアプリケーションに返す
3.
🖥 ログインシンプルパスワード->6ビット reduxに格納され、アプリケーションを実行するたびにデータが初期化されるため、適切ではありません AsyncStorage
これを使用して、デバイスのハードディスク(HDD)にデータを格納します.
1.自動ログインまたはログイン拒否!SplashScreenは、デバイスのハードディスク(HDD)に が値の場合 ない場合は root/SplashScreen.js root/src/containers/auth/Splash.js root/src/components/Splash.js
値がない場合は、ログイン画面に移動します. root/App.js
ログイン時、
サーバ発行
フロントエンド非同期ストレージに格納
actions/authAction.js
reducers/auth.js
サーバがクライアントの認証を管理しない
トークンを使う!!!
1.モバイルapp->認証データの送信
2.サーバ->秘密鍵を作成し、トークンをモバイルアプリケーションに返す
3.
redux storge
上のトークンストレージ+アプリケーション実行中はRidexが管理する🖥 ログイン
<TextInput
keyboardType="number-pad"
maxLength={6}
style={authStyles.contentInput}
placeholder="PassWord"
numberOfLines={1}
secureTextEntry
onChangeText={inputPw => setPassword(inputPw)}
/>
📍 ライブラリの使用accessToken
、refreshToken
、user
接続時に使用するように実現これを使用して、デバイスのハードディスク(HDD)にデータを格納します.
npm i @react-native-community/async-storage
📍 実装機能1.自動ログインまたはログイン拒否!
user
が含まれているかどうかを確認します.Main
,Auth
に切り替えます.import React, { useState, useEffect } from 'react';
import Splash from './containers/auth/Splash'
import { View} from 'react-native';
function SplashScreen({ navigation }) {
return (
<View >
<Splash navigation={navigation} />
</View>
)
}
export default SplashScreen;
import Splash from '../../components/auth/Splash';
import { connect } from 'react-redux';
import { autoLogin } from '../../store/actions/userAction';
function mapReduxStateToReactProps(state) {
return state;
}
function mapReduxDispatchToReactProps(dispatch) {
return {
goMain: function (dataToSubmit) {
dispatch(autoLogin(dataToSubmit));
}
}
}
export default connect(mapReduxStateToReactProps, mapReduxDispatchToReactProps)(Splash);
import React, { useState, useEffect } from 'react';
import AsyncStorage from '@react-native-community/async-storage';
import { View, Text } from 'react-native';
import { connect } from 'react-redux';
import { autoLogin } from '../../store/actions/userAction';
function Splash(props) {
useEffect(() => {
setTimeout(() => {
AsyncStorage.getItem('user')
.then((value) => {
console.log(value)
if (value != null) {
props.goMain(value)
props.navigation.replace('Main');
} else {
props.navigation.replace('Auth');
console.log(value);
}
}
);
}, 3000);
}, []);
return (
<View >
<Text>스플래쉬 화면</Text>
</View>
)
}
export default Splash;
AsyncStorage.getItem(「user」)の値がある場合は、値がない場合は、ログイン画面に移動します.
const App = () => {
return (
<Provider store={store}>
<NavigationContainer>
<Stack.Navigator initialRouteName="Splash">
<Stack.Screen name="Splash" component={SplashScreen} />
<Stack.Screen name="Auth" component={AuthStackScreen}
options={{ headerShown: false }}
/>
<Stack.Screen name="Main" component={MainTabScreen} />
</Stack.Navigator>
</NavigationContainer>
</Provider>
);
};
export default App;
2.ログイン-トークンログイン時、
id
,password
bodyに入れるpost
サーバ発行
accessToken
、refreshToken
フロントエンド非同期ストレージに格納
actions/authAction.js
export function login(dataToSubmit) {
const data = request("POST", USERS_URL + "/login", dataToSubmit);
// data: {
// accessToken,
// refreshToken,
// }
return {
type: types.LOGIN,
payload: data,
uniqueId: dataToSubmit.id
}
};
case types.LOGIN:
console.log(action.uniqueId)
AsyncStorage.multiSet([
['accessToken', action.data.accessToken],
['refreshToken', action.data.refreshToken],
['uniqueId', action.uniqueId]
])
return {
...state,
uniqueId: action.uniqueId
}
Reference
この問題について([RN]ログインとJWT), 我々は、より多くの情報をここで見つけました https://velog.io/@seohee0112/RN-로그인-및-회원가입-구현テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol