我正在使用Amazon S3存储桶提供静态网站服务.我知道我可以限制对某些"文件夹"的读取权限(真正的密钥,因为S3没有文件夹)但我真正想做的是通过文件扩展名限制访问.
换句话说,我想说"只要该文件以htm/css/js/png结尾","为这个桶中的任何文件提供对每个人的读访问权"; 那可能吗?
(顺便说一句,我担心的是我会不小心上传一个.git文件,或类似我不想向世界展示的东西;设置安全策略以防止显示这些文件似乎比信任我自己更安全永远不会意外上传错误的文件).
已有类似的"版本控制的托管解决方案 - 使用预提交挂钩?" 关于SO的问题.但是,提出该问题的用户只需要客户端挂钩,而我正在寻找允许您配置服务器端挂钩的Git主机.
(我正在寻找这个的原因是我们可以阻止开发人员在特定分支上"推送-f".客户端钩子对解决这个问题没有什么用处.)
那么,任何人都可以推荐允许其用户设置服务器端挂钩的Git主机吗?
(如果主持人还提供集成的bug跟踪器,则可获得奖励积分.)
*编辑*
这个问题已经得到了回答,奖金被授予......但是如果有任何Git主机可以更容易地防止"推-f"(通过提供自己的权限级别,或通过提供发布访问权限)预先接收的钩子,然后让我使用已经写好的/标准的预接收脚本)我很乐意听到它们.
我目前正在使用Backbone.js构建一个网站.该站点有一个使用FOSRestBundle在Symfony中构建的RESTful API.开发进展顺利,直到我偶然发现了一些与用户相关的门票.
据我所知,处理此类问题的最佳方法是使用基于令牌的系统,用户在批准登录后获取访问令牌.我将描述我目前对工作流程的看法,并在此过程中提出问题.更重要的是,如果我误解了,请纠正我.
首先,用户访问登录表单,然后用户输入凭证,并将AJAX请求发送到服务器.根据我的理解,这应该全部用SSL处理,但是使用Backbonejs,你不能简单地说应该使用HTTPS访问登录页面,因为Backbone是一个单页框架.那么这会迫使我在应用程序中使用HTTPS吗?
在下一步中,REST服务器验证凭据,并且它们被批准,然后REST服务器将访问令牌发送到客户端.此令牌是在本地存储还是cookie中保存(在客户端)?
也是存储在服务器上的登录,以便REST服务器可以在一定时间后将用户注销?
现在,客户端发送此访问令牌以及其他请求,以便服务器可以识别客户端,并批准请求.那么访问令牌也存储在REST服务器上?
最后,智能人士称之为"oauth",还是与之相关?
谢谢.
有没有办法在单个道具上使用多个验证React.PropTypes.特别想要混合自定义验证和库存验证.
我有两个道具,一个对象options和一个字符串value.我想检查这props.value是一个字符串,但也是对象上的一个键.使用coffeescript看起来像:
propTypes:
options: React.PropTypes.Object.isRequired
value: (props, propName, componentName) ->
unless props[propName] of props.options
new Error('my custom message')
Run Code Online (Sandbox Code Playgroud)
这很好用,但我也想确保我的值是一个字符串类型.我敢肯定我可以手动坚持自定义功能验证没问题,但理想情况下,我只想使用React.PropTypes.string.isRequired.香港专业教育学院尝试将其放入自定义功能并执行它,但这不起作用.以下也不起作用:
value: React.PropTypes.string.isRequired && (props, propName, componentName) ->
unless props[propName] of props.options
new Error('my custom message')
Run Code Online (Sandbox Code Playgroud)
有没有办法让这个工作使用内置验证器的反应,或者在我的函数中重写它唯一的选择?
题:
在一个做出反应的事件处理程序,有没有方便的方式e.preventeDefault,并e.stopPropagation同时(你曾经是能够与方式return false)?
背景: React已经开始弃用以下内容:
return false;
Run Code Online (Sandbox Code Playgroud)
内部事件处理程序作为实现的一种手段:
e.preventDefault();
e.stopPropagation();
Run Code Online (Sandbox Code Playgroud)
这个GitHub问题解释了React团队正在尝试return false顺便解决事件回调问题(即没有意图阻止默认/停止传播).
这很有道理,我理解它背后的逻辑,但......
e.preventDefault();
e.stopPropagation();
Run Code Online (Sandbox Code Playgroud)
比起来更难以记忆和写作return false.
所以,我的问题是:有没有方便的方法来获取return falseReact事件处理程序内的功能?例如,是否有某种e.stopBoth()方法,或return React.PREVENT常量,或任何其他方式来获得旧return false功能?
或者,如果没有,有没有办法猴子补丁这样的功能?
我有propType表达式,有时会发出警告。
发生这种情况时,我想检查引起警告的对象,因为在相同情况下,控制台中的警告消息还不够有用。
我尝试通过react的规范代码进行调试,以找到断点的正确位置,但是我希望有一种更简单的方法来获取有关警告的更多诊断信息。
我正在尝试实现 HTML5 可拖动,但我看到一些没有多大意义的东西。我有一个像这样的 React 组件:
class Draggable extends React.Component {
_onDragEnd(e) {
console.log(`end`, e.pageX)
}
_onDrag(e) {
console.log(`drag`, e.pageX)
}
_onDragStart(e) {
console.log(`start`, e.pageX)
}
return <div draggable={true}
onDrag={this._onDrag.bind(this)}
onDragEnd={this._onDragEnd.bind(this)}
onDragStart={this._onDragStart.bind(this)}
}
}
Run Code Online (Sandbox Code Playgroud)
当我拖动它时,我看到以下输出:
start 276
drag 279
drag 280
drag 281
drag 282
drag 283
drag 285
drag 286
drag 287
drag 288
drag 289
end 2209
Run Code Online (Sandbox Code Playgroud)
请注意,pageX拖动结束时的 比之前发生的事件的 几乎大pageX2k drag。因为我知道我没有在上一个drag事件和该dragEnd事件之间移动鼠标 2k,所以我很困惑为什么它dragEnd pageX会大得多。
使用过 HTML 5 拖放功能的人以前是否见过类似的情况,如果是的话,您知道如何修复它吗?我意识到我可以通过将 保存 …
通常,如果你有类似的东西:
<SomeComponent foo={bar} />
Run Code Online (Sandbox Code Playgroud)
您可以使用三元组使其成为可选项:
{bar ? <SomeComponent foo={bar} /> : null}
Run Code Online (Sandbox Code Playgroud)
但是,如果您开始使用的块包含一个组件加上一些文本(单个空格)和一个变量,例如:
<SomeComponent foo={bar} /> {foobar}
Run Code Online (Sandbox Code Playgroud)
将它括在括号中是行不通的:
{bar ? (<SomeComponent foo={bar} /> {foobar}) : null}
Run Code Online (Sandbox Code Playgroud)
事实上,我发现使其工作的唯一方法是将所有内容包装在另一个元素中:
{bar ? <span><SomeComponent foo={bar} /> {foobar}</span> : null}
Run Code Online (Sandbox Code Playgroud)
有没有其他方法告诉React:
<SomeComponent foo={bar} /> {foobar}
Run Code Online (Sandbox Code Playgroud)
是一个离散的块,所以我可以在三元组中使用它(在JS内部,而不是JSX,逻辑)...而不添加无意义的包装元素?
GraphQL 查询/突变非常干净:它们只需要它们实际需要的东西,不需要其他东西。或者至少是基本的。
但是,如果您将变量与任一变量一起使用,那么您的语法将不可避免地存在冗余:
query HeroNameAndFriends($episode: Episode) {
hero(episode: $episode) {
name
friends {
name
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意$episode: Episode和episode: $episode。问题是每个 GraphQL 突变都需要同样的冗余:如果您使用变量,则每个参数都必须定义两次(如果您进行编程查询,则无疑正在使用变量)。
我的问题是,为什么?似乎没有必要让每个使用 GraphQL 的人都重复一遍他们的论点。
为什么不直接编写语法:
query HeroNameAndFriends() {
hero($episode: Episode) {
name
friends {
name
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者如果您确实需要允许不同的变量名称,请允许可选的第三部分:
query HeroNameAndFriends() {
hero(episode: Episode : $episode) {
name
friends {
name
}
}
}
Run Code Online (Sandbox Code Playgroud)
需要明确的是,我知道使用变量的查询与非变量查询不同,但我要问的是,为什么要为这些查询选择一种迫使每个人重复自己的语法?
看起来就是这样……不干!我肯定错过了为什么需要重复的一个重要原因?
我经常在我的Javascript中使用以下模式:
x = couldBeNullThing || valueIfItIsNull;
Run Code Online (Sandbox Code Playgroud)
因为它胜于:
x = couldBeNullThing ? couldBeNullThing : valueIfItIsNull;
Run Code Online (Sandbox Code Playgroud)
我也经常使用相同模式的轻微变体:
x = x || valueIfXIsNotDefined;
Run Code Online (Sandbox Code Playgroud)
这一切都很棒...除了问题,我最近发现:
foo = "";
//assert foo.x === undefined;
foo.x = foo.x || valueIfXIsNotDefined;
//assert foo.x === undefined;
Run Code Online (Sandbox Code Playgroud)
换句话说,如果你有一个字符串,你就做了string.aPropertyThatStringDoesntHave || foo,你既不会回头也不会回到实际价值; 相反,你得到了未定义.
谁能解释为什么会这样?在我看来,如果foo.x未定义,那么foo.x || anythingElse应该总是导致任何东西......所以为什么不呢?
reactjs ×4
javascript ×3
amazon-s3 ×1
backbone.js ×1
coffeescript ×1
events ×1
git ×1
graphql ×1
hosting ×1
html ×1
jsx ×1
rest ×1
symfony ×1
ternary ×1
truthiness ×1