我试图在Rails中获得全页面缓存,但是我对CSRF有一个很大的障碍 - 或许只是我对它的理解.我目前有一个form_authenticity_token
存储在一个cookie中的字符串,JS可以访问并重写头标记.
我在生成的HTML中有两个地方找到了令牌:
1)在头部
<meta name="csrf-token" content="[hash]">
2)在表单的隐藏输入元素内
<input type="hidden" name="authenticity_token" value="[different hash]">
如上所述,这些哈希值彼此不同(在未启用缓存的开发模式中).他们为什么不同?为什么我可以删除头元标记并单独保留表单输入并允许请求?然而,当我删除表单输入标记并保留标题时,请求被拒绝了?
实际上这意味着头部标签是无用的,不是吗?我可以将表单输入标记重写为我的cookie中的值,就像我对标题标记所做的那样,但由于它们彼此不同,我对于最终结果可能意味着什么,特别是涉及到整页缓存时要谨慎.
Application Controller包含:
protect_from_forgery with: :exception
before_filter :csrf_cookie
def csrf_cookie
cookies['authenticity-token'.freeze] = {
value: form_authenticity_token,
expires: 1.day.from_now,
secure: (Rails.env.staging? || Rails.env.production?)
}
end
Run Code Online (Sandbox Code Playgroud) 我正在构建一个包含配置文件管理页面的简单CMS。在此配置文件页面以及其他字段上,存在一个下拉列表,我使用wtforms扩展的QuerySelectField从表“ parks”生成该列表:
from wtforms.ext.sqlalchemy.fields import QuerySelectField
Run Code Online (Sandbox Code Playgroud)
配置文件页面上的其余字段由“用户”表填充。
假设用户已经登录,并且在“用户”表中的记录已经填充。“用户”表中的字段中有一个外键,用于表示“公园”表中的值:“ park_id”。
当登录的用户导航到其个人资料页面时,我想在下拉菜单中显示与该用户的park_id外键值相对应的选择。
请注意,Flask / Python等对我来说是非常新的。另外,我使用的是Flask-Security,下面的User模型基于他们的示例。也许我需要与用户/公园建立另一种关系?
对我来说,显示用户保存的配置文件信息(包括可能显示在下拉列表中以供编辑的信息)似乎很基本。我担心我缺少基本的东西。到目前为止,关于SO以及其他方面的其他类似问题/答案对我来说似乎令人困惑。
我的用户模型:
# Define models
roles_users = db.Table('roles_users',
db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
db.Column('role_id', db.Integer(), db.ForeignKey('role.id')))
class Role(db.Model, RoleMixin):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(80), unique=True)
description = db.Column(db.String(255))
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(255), unique=True)
password = db.Column(db.String(255))
active = db.Column(db.Boolean())
confirmed_at = db.Column(db.DateTime())
roles = db.relationship('Role', secondary=roles_users,
backref=db.backref('users', lazy='dynamic'))
park_id = db.Column(db.Integer)
weather_zip = db.Column(db.String(255))
flickr_api_key = db.Column(db.String(255))
flickr_api_secret = …
Run Code Online (Sandbox Code Playgroud) 我们假设我有这两个对象
class Customer {
[PrimaryKey]
public string id;
[??????]
public List<int> addresses;
}
Run Code Online (Sandbox Code Playgroud)
和
class Address {
[PrimaryKey, AutoIncrement]
public int id;
public string street;
public int number;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用SQLite.NET ORM来保存Customers对象?因为我很难保存列表.
如果没有这种方式,是否有某种我可以实现的事件或我可以覆盖的方法,以便当一个对象被加载时代码会触发?
我正在考虑在地址列表上方添加[忽略]的方法,当事件触发时我可以使用SQLite.net从另一个表加载地址的ID
提前感谢您提供的任何帮助
我已经获得了118天的数据集.我应该预测接下来28天的价值.我已经尝试了下面的代码.但是我在28天内获得了相同的价值.你能帮我找到我的错吗?谢谢.
library(forecast)
library(dplyr)
head(product)
ts_product = ts(product$Qty, start=1,frequency=1)
ts_product
plot(ts_product)
#predictions of 28 days
m_ets = ets(ts_product)
f_ets = forecast(m_ets, h=28)
plot(f_ets)
Run Code Online (Sandbox Code Playgroud)
数据由Qty
下式给出:
数量= c(53,40,37,45,69,105,62,101,104,46,92,157,133,173,139,163,145,154,245,147,85,131,228, 192,240,346,267,267,243,233,233,244,241,136,309,236,310,266,280,321,349,335,410,226,391,314,250,368, 282,203,250,233,233,277,338,279,279,266,253,178,238,126,279,258,350,277,226,287,180,268,191,279,214, 133,292,212,307,232,165,107,121,188,198,154,128,85,106,67,63,88,107,56,41,59,27,58,80,75, 93,54,14,36,107,82,83,112,37,57,9,51,47,57,68,97,25,45,69,89)
这是我得到的预测.
Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
119 69.53429 2.089823 136.9788 -33.61312 172.6817
120 69.53429 -2.569107 141.6377 -40.73834 179.8069
121 69.53429 -6.944751 146.0133 -47.43031 186.4989
122 69.53429 -11.083248 150.1518 -53.75959 192.8282
123 69.53429 -15.019428 154.0880 -59.77946 198.8480
124 69.53429 -18.780346 157.8489 -65.53129 204.5999
125 69.53429 …
Run Code Online (Sandbox Code Playgroud) 使用FOSOAuthServerBundle的标准端点(使用FOSUserBundle),我可以通过提供client_id,client_secret,用户和密码组合来检索访问和刷新令牌.响应如下:
{
"accessToken": "YTg2ZTJkNTY2MGM5MGQyNzZjYjkyZWMwYzg1YTZmZTZmOTIyMzAxNDY2MTkwZDU5ODYzZTAzYmIyNDI0YTQ4ZQ",
"expiresIn": 3600,
"tokenType": "bearer",
"refreshToken": "OTU1MGZhNDQ2ODFkZDUzMmQ4Y2FhNTk5OWM0NWFlNDk0YTY0ZDZhOTRjZTUwM2JlYTE3MDkxYzU3ZWY1OGRkYQ"
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何通过传递客户端和用户凭据以编程方式检索类似的数据?即如何从我的应用程序的另一部分进行相同的调用而不通过HTTP(慢),而是直接通过捆绑代码(快速)?
我确信必须有一个简单的方法来做到这一点,但到目前为止我能找到的最好的是这个https://github.com/FriendsOfSymfony/FOSOAuthServerBundle/issues/347并没有真正实现与HTTP调用.
我将使用Angular2接收websocket传入消息并根据收到的消息更新网页.现在,我正在使用虚拟回声websocket服务并将替换它.
根据我的理解,接收websocket消息的函数必须返回由将更新网页的处理程序订阅的observable.但我无法弄清楚如何返回一个可观察的.
代码段附于下方.在MonitorService
创建一个WebSocket连接,并返回可观察到包含接收到的消息.
@Injectable()
export class MonitorService {
private actionUrl: string;
private headers: Headers;
private websocket: any;
private receivedMsg: any;
constructor(private http: Http, private configuration: AppConfiguration) {
this.actionUrl = configuration.BaseUrl + 'monitor/';
this.headers = new Headers();
this.headers.append('Content-Type', 'application/json');
this.headers.append('Accept', 'application/json');
}
public GetInstanceStatus = (): Observable<Response> => {
this.websocket = new WebSocket("ws://echo.websocket.org/"); //dummy echo websocket service
this.websocket.onopen = (evt) => {
this.websocket.send("Hello World");
};
this.websocket.onmessage = (evt) => {
this.receivedMsg = evt;
};
return new Observable(this.receivedMsg).share();
}
} …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用由Three.js示例提供的加载的typeface.js字体,但我继续收到以下错误:
Uncaught TypeError: this.addShapeList is not a function
Run Code Online (Sandbox Code Playgroud)
我已经检查过Three.js文件,我正在使用来自three.js主分支的构建版本,因为错误的原因并且似乎THREE.ExtrudeGeometry
scoped this
缺少之前声明的所有原型方法.
通过无法识别范围的顶点数组,在到达方法时更改要使用的代码THREE.ExtrudeGeometry.addShapeList
而不是this.addShapeList
稍后THREE.ExtrudeGeometry.prototype.addShape
失败.
我当然在创建TextGeometry时做错了但我无法弄清楚是什么.
这是我用来加载字体,创建TextGeometry对象并将其添加到场景的代码.
loader.load('./fonts/gentilis_bold.typeface.js', function(response){
font = response;
var text = THREE.TextGeometry('Some Text', {
font: font,
size: 70
});
scene.add(text);
});
Run Code Online (Sandbox Code Playgroud)
这是展示我的问题的小提琴.
有人可以分享将ag-grid添加到Visual Studio 2015 c#项目的步骤吗?我尝试了"npm install ag-grid",它在我的项目文件夹中创建了node_modules/ag-grid,但它没有将它添加到解决方案中.如果我将node_modules文件夹添加到解决方案,并尝试重建,我会收到错误:
"构建:除非提供'--module'标志,否则无法编译模块.C:\ SVN\SolutionName\ProjectName \node_modules\ag-grid\dist\lib\entities\rowNode.d.ts 5"
和
"构建:对装饰器的实验支持是一个在将来的版本中可能会发生变化的功能.指定'--experimentalDecorators'来删除此警告.C:\ SVN\SolutionName\ProjectName \node_modules\ag-grid\src\ts\cellNavigationService.ts"
在config.yml中,我定义了我的集合,如下所示:
collections:
music:
output: false
dancing:
output: false
Run Code Online (Sandbox Code Playgroud)
问题是我将有很多集合,它们会混乱我的根Jekyll文件夹.
有没有办法将所有集合分组到一个文件夹中,例如_collections?
所以,我会:
_collections
_dancing
_music
....
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个函数,该函数将获取分配给已授权user
和/或没有分配用户的存储桶的所有“存储桶” 。
关系等应有的发挥作用。除非我想念什么?
我如何也可以为所有存储桶分配用户-还包括没有分配用户(包括身份验证用户)的存储桶。
我的问题很可能源于orWhere
查询...
$buckets = Team::currentTeam()->buckets()->with('user')->whereHas('user', function($query) {
$query->where('user_id', Auth::user()->id)
->orWhere('user_id', function() {
$query->count();
}, '<', 0);
})->get();
Run Code Online (Sandbox Code Playgroud) c# ×2
ag-grid ×1
angular ×1
angularjs ×1
collections ×1
csrf ×1
forecasting ×1
forms ×1
javascript ×1
jekyll ×1
laravel ×1
laravel-5 ×1
laravel-5.1 ×1
npm ×1
observable ×1
php ×1
python ×1
r ×1
ruby ×1
sqlite.net ×1
symfony ×1
three.js ×1
time-series ×1
websocket ×1
xamarin ×1