Ugo*_*lai 16 cookies session reactjs express-session react-cookie
我需要知道我的用户是否已连接.为此,我想阅读我在服务器端使用快速会话设置的cookie:
app.use(session({
secret: 'crypted key',
resave: false,
saveUninitialized: true,
cookie: { secure: false } // Put true if https
}))Run Code Online (Sandbox Code Playgroud)
app.post('/connect_user', (req, res) => {
req.session.cookie.username = req.body.username
findUserData('username', req.body.username, req, (userData) => {
req.session.cookie.id = userData.id
req.session.cookie.username = userData.username
res.redirect('/profil')
})
})Run Code Online (Sandbox Code Playgroud)
我尝试使用react-cookie,但它不起作用,但我复制/粘贴npm react-cookie doc:
import React from 'react';
import Landing from './Landing';
import Home from './Home';
import Profil from './Profil';
import {BrowserRouter as Router, Route} from 'react-router-dom'
import { instanceOf } from 'prop-types';
import { Cookies } from 'react-cookie';
class App extends React.Component {
static propTypes = {
cookies: instanceOf(Cookies).isRequired
};
constructor(props) {
super(props);
const { cookies } = props;
this.state = {
username: cookies.get('username')
};
}
render() {
console.log(this.state.name)
let homePage = (!this.state.username) ? <Landing/> : <Home/>
return (
<Router>
<div>
<Route exact path='/' component={homePage}></Route>
<Route path='/profil' component={Profil}></Route>
</div>
</Router>
)
}
}
export default App;Run Code Online (Sandbox Code Playgroud)
任何人都知道为什么不起作用?这很奇怪因为document.cookie给我带来了好结果,但我不知道如何处理它:PHPSESSID = 0nv9ic8h7pv2b63lu4v7eg3mop; USER_ID = 21; 用户名=乌戈; SL_G_WPT_TO = FR; SL_GWPT_Show_Hide_tmp =未定义; SL_wptGlobTipTmp =不确定
谢谢你的帮助!
小智 32
There is no need for a third party npm package. You can use plain JS to extract the cookie. Here is a custom function for that:
function getCookie(key) {
var b = document.cookie.match("(^|;)\\s*" + key + "\\s*=\\s*([^;]+)");
return b ? b.pop() : "";
}
Run Code Online (Sandbox Code Playgroud)
Sub*_*shu 30
您可以使用js-cookie包,并可以使用npm install js-cookie --save命令安装它.
import React from 'react';
import Cookies from 'js-cookie';
class App extends React.Component {
this.state = {
username: Cookies.get('username')
}
// more code....
}
Run Code Online (Sandbox Code Playgroud)
文档:https://github.com/js-cookie/js-cookie
NPM:https://www.npmjs.com/package/js-cookie
Hun*_*ter 17
如果您只想通过键获取 cookie 值,我建议使用没有任何依赖项的普通 javascript。
在这个例子中,它在 Regex 的帮助下通过键“用户名”获取 cookie 值。
let cookieValue = document.cookie.replace(/(?:(?:^|.*;\s*)username\s*\=\s*([^;]*).*$)|^.*$/, "$1");
Run Code Online (Sandbox Code Playgroud)
fuk*_*it0 15
您还可以使用以下方法,而不使用任何第 3 方包,如developer.mozilla.org中所述:
const cookieValue = document.cookie
.split('; ')
.find((row) => row.startsWith('YOUR-COOKIE='))?
.split('=')[1];
Run Code Online (Sandbox Code Playgroud)
我建议使用universal-cookies它,因为它更易于使用。请注意,cookie与React无关。它们存储在浏览器中,您可以使用浏览器的默认API获取Cookie。
这是一个如何使用的示例 universal-cookies
import React from 'react';
// other imports...
import Cookies from 'universal-cookie';
const cookies = new Cookies();
class App extends React.Component {
this.state = {
username: cookies.get('username')
}
// more code....
Run Code Online (Sandbox Code Playgroud)
来源:https : //www.npmjs.com/package/universal-cookie
| 归档时间: |
|
| 查看次数: |
34171 次 |
| 最近记录: |