对不起,也许这是许多其他人提出的问题,但我真的很困惑,因为一些参考文献有很多不同的方法.
我使用React SPA,Express,Express-session,Passport,JWT
所以我对Cookies,Session和JWT/Passport感到困惑.
许多网站使用cookie来存储购物车令牌.到目前为止,我已根据会话ID存储购物车数据,而不添加任何cookie.
因此,当用户访问我的网站时,我会将其与他们匹配
req.sessionID,然后检索数据库中的数据,如购物车和用户会话.
所以我的问题是我需要存储cookie吗?因为我可以通过req.sessionID访问它来获取所需的数据.
第二个
我使用了一个身份验证passport-google-oauth20.在我成功登录后,数据被保存到会话中.并将其发送到客户端我必须通过URL查询发送它?token='sdsaxas'.
在这种情况下,我得到了很多意见分歧.有人将其保存到本地存储中,有人通过使用JWT将其转换为令牌将其保存为cookie.
jwt.sign(
payload,
keys.jwt.secretOrPrivateKey,
{
expiresIn:keys.jwt.expiresIn // < i dont know what is this expired for cookies or localstorage ?
}, (err, token) => {
res.redirect(keys.origin.url + "?token=" + token);
});
Run Code Online (Sandbox Code Playgroud)
结论是一切都与会话有关所以我可以用sessionID做所有事情?没有cookies或localstorage
只有通过执行一次或每次页面刷新并检索数据然后保存到redux,因为我使用React SPA
没有Android手机我可以运行android模拟器吗?我已经安装了android studio,我已经安装了android虚拟设备.但是,当我尝试运行它时,会出现如下错误:
无法在Android上启动项目:运行adb时出错:找不到Android设备.请连接设备,并按照下列指示启用USB调试: https://developer.android.com/studio/run/device.html#developer-device-options.如果您使用的是Genymotion,请转到设置 - > ADB,选择"使用自定义Android SDK工具",然后将其指向Android SDK目录.
我只想在没有USB的情况下看到我的电脑中的模拟器.我有一部iPhone,但它只是出现在我的手机中而不是在我的电脑中使用世博扫描条形码.我不想这样做,因为在我看来,它不适合调试等我在我的电脑中使用Windows所以我不能使用iOS模拟器.
如何在Windows上运行expo android模拟器?
我使用React Single Page Application作为客户端或Create React App(CRA)。
在后端,我使用Node.js&Express。
要获取数据或存储,我需要从客户端到后端调用API。
实际上,我已经看过几种中间件,例如:-Express CSURF
但老实说,我不明白如何在每次请求时都向客户端发送CSRF令牌。我尝试了几次,方法是将CSRF插入cookie中,然后将其放在客户端。但是当存储第一个请求或新的cookie时,出现error Invalid CSRF Token。
即使我这样做:
app.use(session({
genid: function (req) {
return uuidv4() // use UUIDs for session IDs
},
name:keys.session.name,
secret: keys.session.secret,
resave: false,
saveUninitialized: true,
rolling:true,
cookie: {
secure: false,
httpOnly: true,
maxAge:keys.session.maxAge, // satu hari,
sameSite:true,
}
}));
app.use(passport.session());
app.use(cookieParser());
app.use(csrf({ cookie: false }));
app.use((req,res,next)=>{
res.cookie('CSRF_token', req.csrfToken(), { sameSite: true });
})
Run Code Online (Sandbox Code Playgroud)
这意味着CSRF_token cookie将更改每个请求。但我只这样设置一次:axios.defaults.headers.common['csrf-token'] = csrf;结果仍然有效,但不起作用。
那我需要CSRF吗?或如何在React SPA上配置正确的SPA。
我使用 Express-session 和 Passport 库。
在本例中,我想创建一个 React SPA 网站,但我对正确的系统安全性感到困惑。
我看到有很多方法可以进行身份验证,这让我感到困惑。
护照中有2种身份验证:Passport-jwt和Passport-local
因为我使用 Express 会话,所以我选择使用护照本地。
我还需要使用passport-jwt吗?对于像这样插入标头以指示用户已登录的每个请求?
const opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = keys.passport.secretOrPrivateKey;
passport.use(new JwtStrategy(opts,(jwt_payload,done)=>{
let queryFindAdmin = 'select * from admin where id = ?';
db.query(queryFindAdmin,[jwt_payload.id],(err,result)=>{
if(err) return done(err,null);
if(result.length > 0){
console.log(result);
return done(null, result[0]);
}
return done(null, false);
})
}));
Run Code Online (Sandbox Code Playgroud) 我尝试使用depedency_injector在我的控制台应用程序中实现 DI
我有一些规则,每个请求都应该对所有依赖项使用相同的数据库连接,因此当有请求时,它将创建一个新的数据库连接,每个请求 1 个 DbConnection,这样我就可以使此事务性(ACID)。
这是我的代码,仍然在所有依赖项上创建新的数据库连接。我不想使用 Singleton,因为它只使用了 1 个连接。
数据库.py
engine_mysql = create_engine(DB_MYSQL_DSN, pool_size=20, max_overflow=0)
session_mysql = sessionmaker(autocommit=False, autoflush=False, bind=engine_mysql)
class Database:
_session_mysql: Session
_session_psql: Session
def __init__(self) -> None:
print(100 * "=")
print("SESSION CREATED")
print(100 * "=")
self._session_mysql = session_mysql()
def get_mysql_session(self):
print(100 * "=")
print("SESSION CALL MYSQL")
print(100 * "=")
return self._session_mysql
Run Code Online (Sandbox Code Playgroud)
数据库容器.py
class DatabaseContainer(containers.DeclarativeContainer):
database = providers.Factory(Database)
db_mysql = providers.Singleton(database.provided.get_mysql_session)
Run Code Online (Sandbox Code Playgroud)
存储库容器.py
class RepositoryContainer(containers.DeclarativeContainer):
database = providers.DependenciesContainer()
transaction = providers.Factory(TransactionRepository, session=database.db_mysql)
transaction_package = providers.Factory( …Run Code Online (Sandbox Code Playgroud) 错误:
[Vue 警告]:属性或方法“$v”未在实例上定义,但在渲染期间被引用。通过初始化属性,确保此属性是反应性的,无论是在数据选项中,还是对于基于类的组件。请参阅:https : //vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties。
在发现
---> 在资源\资产\js\组件\产品\Product_create.vue
我使用 Vue.js 和 Vuelidate 作为验证器,我从这里复制并粘贴了此代码https://jsfiddle.net/Frizi/b5v4faqf/但它仍然不起作用:
Vue 组件:
<template >
<input v-model="$v.text.$model" :class="status($v.text)">
<!-- <pre>{{ $v }}</pre> -->
</template>
<script>
import { required, minLength, between } from 'vuelidate/lib/validators'
export default {
data() {
return {
text: ''
}
},
validations: {
text: {
required,
minLength: minLength(5)
}
},
methods: {
status(validation) {
return {
error: validation.$error,
dirty: validation.$dirty
}
}
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
应用程序.js
require('./bootstrap');
window.Vue = require('vue');
window.VueRouter …Run Code Online (Sandbox Code Playgroud) 我想使用 vue.js 制作一个产品过滤器,可以根据最低价格或最高价格、颜色和产品类型进行过滤。实际上我想制作这样的产品过滤器:IMAGE PRODUCT FILTER HERE
我想从这里制作这样的过滤器产品:链接
我的产品数据:
Array(5) 0:base_color:"000000"category:"T-SHIRT" id:3 image:"ss18-1_000000_r11xw_crafted-pride-navy-ss18-2.jpg" name:"ChatimeMidnight Sale 2017_122" price:123 product :"ss18-1" product_color_id:3 status:1 stock:"2" weight:123123
Vue.js 代码
<script type="text/javascript">
const product_list = new Vue({
el:"#product-list",
data:{
filterBox:false,
dataFilter:{
soryBy:"",
base_color:[],
category:[]
},
isActive: false,
products:{!! $products->toJson() !!},
productcolors:{!!$productcolors->toJson()!!},
categories:{!!$categories->toJson()!!},
inputSearch:'',
},
mounted(){
console.log(this.products);
},
computed:{
filteredProduct:function(){
//I DONT KNOW HOW TO USE OBJECT FOR FILTERING
}
},
methods:{
filterbtn()
{
if (this.filterBox == false) {
this.filterBox = true;
}else {
this.filterBox …Run Code Online (Sandbox Code Playgroud) express ×2
node.js ×2
vue.js ×2
android ×1
csrf ×1
expo ×1
javascript ×1
jwt ×1
laravel ×1
passport.js ×1
python ×1
react-native ×1
reactjs ×1
session ×1
sqlalchemy ×1