実現したいこと
React Nativeでスマホアプリを開発しています。
バックエンドでNode.jsを使用してWebAPIを作っていて、Express SessionでSession管理をしたいです。
発生している問題
postでreq.sessionに値を保存しても、getで呼び出したときにundefinedになってしまいます。
どうしたらいいでしょうか?
app.js(Node.js)
javascript
1const express = require('express'); 2const app = express(); 3const session = require('express-session'); 4// const bodyParser = require('body-parser'); 5 6app.use(express.json()); 7 8// app.use(express.urlencoded({ extended: false })); 9app.use(session({ 10 secret: 'my_secret_key', 11 resave: false, 12 saveUninitialized: false, 13 rolling: true, 14 cookie: { 15 httpOnly: true, 16 maxAge: 60 * 1000 17 } 18})); 19 20//routes 21app.use('/api/user', require('./routes/user')); 22app.use('/api/tmp_user', require('./routes/tmp_user')); 23app.use('/api/post', require('./routes/post')); 24app.use('/api/hand_history', require('./routes/hand_history')); 25 26app.use('/validation', require('./routes/validation')); 27app.use('/login', require('./routes/login')); 28 29 30 31app.listen(3000);
login.js(Node.js)
javascript
1const express = require('express'); 2const router = express.Router(); 3const connection = require('../connetction'); 4const bcrypt = require('bcrypt'); 5 6router.get('/', (req, res, next) => { 7 console.log(req.session); 8}) 9 10router.post('/', (req, res) => { 11 const email = req.body.email; 12 const plain = req.body.password; 13 14 connection.query( 15 'select * from users where email = ?', 16 [email], 17 (error, results) => { 18 if (results.length > 0) { 19 const hash = results[0].password; 20 bcrypt.compare(plain, hash, (error, isEqual) => { 21 if (isEqual) { 22 req.session.userId = results[0].id; 23 console.log(req.session) 24 console.log('ログイン成功') 25 } else { 26 console.log('ログイン失敗') 27 } 28 }) 29 } 30 } 31 ) 32}) 33 34module.exports = router;
Login.js(React Native)
javascript
1import { StatusBar } from 'expo-status-bar'; 2import { useState, Component } from 'react'; 3import { Platform, StyleSheet, Text, View, Button, TextInput, TouchableOpacity, Alert } from 'react-native'; 4import axios from 'axios'; 5 6const host = 'http://192.168.0.195:3000' 7 8const Login = () => { 9 10 const [email, setEmail] = useState(''); 11 const [password, setPassword] = useState(''); 12 const [message, setMessage] = useState([]); 13 14 const login = async () => { 15 16 await axios.post(host + '/login', 17 { 18 email: email, 19 password: password, 20 } 21 ) 22 .then(() => { 23 }) 24 .catch((error) => console.log(error)); 25 } 26 const test = async () => { 27 await axios.get(host + '/login'); 28 29 } 30 31 return ( 32 <View style={styles.container}> 33 <Text>メールアドレス</Text> 34 <TextInput 35 style={styles.input} 36 placeholder='mail' 37 onChangeText={(text) => setEmail(text)} 38 /> 39 <Text>パスワード</Text> 40 <TextInput 41 style={styles.input} 42 secureTextEntry={true} 43 placeholder='password' 44 onChangeText={(text) => setPassword(text)} 45 /> 46 47 <Button 48 title='ログイン' 49 onPress={() => { 50 login(); 51 }} 52 /> 53 <Button 54 title='test' 55 onPress={() => { 56 test(); 57 }} 58 /> 59 {message.map((index) => { 60 return ( 61 <Text>{index.message}</Text> 62 ) 63 })} 64 <StatusBar style="auto" /> 65 66 </View> 67 ); 68} 69const styles = StyleSheet.create({ 70 container: { 71 flex: 1, 72 backgroundColor: '#fff', 73 alignItems: 'center', 74 justifyContent: 'center', 75 }, 76 input: { 77 borderWidth: 1, 78 width: 150 79 }, 80}); 81 82 83export default Login;
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/11 12:58 編集
2022/06/13 04:20