小编ede*_*ill的帖子

如何忽略Rails中特定操作的真实性标记?

当我有一个特定的操作,我不想检查真实性标记时,如何告诉Rails跳过检查它?

ruby-on-rails

165
推荐指数
2
解决办法
7万
查看次数

在HTTP Basic Auth用户名中损坏了UTF-8字符

我正在尝试使用Ruby on Rails构建Web服务.用户通过HTTP Basic Auth进行身份验证.我想在用户名和密码中允许任何有效的UTF-8字符.

问题是浏览器在将它们发送到我的服务之前在基本身份验证凭据中修改了字符.为了测试,我使用'カタカナカタカナカタカナカタカナカタカナカタカナカタカナカタカナカタカナカタカナ'作为我的用户名(不知道它意味着什么 - AFAIK它是我们的QA家伙想出的一些随机字符 - 请原谅我,如果它有点冒犯).

如果我把它看作一个字符串,并做username.unpack("H*")将其转换为十六进制,我得到:"3e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a8"这似乎是对适合32个汉字字符(3个字节元/ 6个十六进制数字).

如果我使用通过HTTP Basic auth进入的用户名执行相同的操作,我会得到:'bafbbaacbafbbaacbafbbaacbafbbaacbafbbaacbafbbaacbafbbaacbafbbaac'.它显然要短得多.使用Firefox Live HTTP Headers插件,这是发送的实际标头:

Authorization: Basic q7+ryqu/q8qrv6vKq7+ryqu/q8qrv6vKq7+ryqu/q8o6q7+ryqu/q8qrv6vKq7+ryqu/q8qrv6vKq7+ryqu/q8o=
Run Code Online (Sandbox Code Playgroud)

看起来像'bafbba ...'字符串,高低字节交换(至少当我将其粘贴到Emacs中时,基本64解码,然后切换到hexl模式).这可能是用户名的UTF16表示,但我没有任何东西可以将其显示为除了胡言乱语之外的任何东西.

Rails将内容类型标头设置为UTF-8,因此浏览器应该以该编码发送.我获得了表单提交的正确数据.

问题出现在Firefox 3.0.8和IE 7中.

那么......是否有一些神奇的功能让网络浏览器通过HTTP Basic Auth发送UTF-8字符?我在接收端处理错误了吗?HTTP Basic Auth是否不适用于非ASCII字符?

ruby-on-rails http utf-8 http-headers

28
推荐指数
2
解决办法
1万
查看次数

如何为Rails ActionMailer配置主机名?

我正在处理一个相当传统的忘记密码电子邮件 - 我想通过电子邮件向用户发送密码更改令牌,这些令牌嵌入在链接中,他们可以点击这些令牌来更改密码.我通过传统的ActionMailer发送电子邮件.

如果我使用普通的link_to标签

<%= link_to "click here", :controller => foo, :action => 'bar', :token => token %>
Run Code Online (Sandbox Code Playgroud)

我得到一个相对链接 - 相当无用的电子邮件.

如果我加入

:only_path => false,然后它说我需要设置错误default_url_options[:host].ActionController文档暗示您通过覆盖控制器中的#default_url_options方法来实现这一点.当然有一个配置选项告诉Rails它的主机名是什么,而不添加我自己的配置文件,解析它等?

ruby-on-rails actionmailer hostname actioncontroller

20
推荐指数
2
解决办法
3万
查看次数

在Travis CI中触发依赖项目的构建

我们在一个存储库中有我们的单页javascript应用程序,在另一个存储库中有我们的后端服务器.有没有办法在后端服务器上传递构建来触发单页面应用程序的构建?

我们不希望将它们组合到单个存储库中,但我们确实希望确保对一个存储库的更改不会破坏另一个存储库.

continuous-integration travis-ci

15
推荐指数
1
解决办法
2014
查看次数

从mongo shell操作所有数据库

我们有一个包含许多不同mongo数据库的系统.我经常想要编写适用于它们的所有(或子集)的即席查询,而不必事先知道哪些数据库存在.

我可以这样做show dbs,它会在视觉上打印一个列表,但有没有办法做类似的事情:

var db_list = listDatabases();

for (i = 0; i < db_list.length; i++) {
     do_something(db_list[i])
}
Run Code Online (Sandbox Code Playgroud)

我的问题show dbs是它没有捕获任何返回值,所以我不能用输出做任何有效的事情.

mongodb

12
推荐指数
1
解决办法
8740
查看次数

版本控制与您自己协调

对于我业余时间的编程,我有一台台式机和一台笔记本电脑(两台都是Mac机,但我怀疑这会对这个问题产生影响).我已经在他们两个上安装了VMware,使用Linux映像来运行我的代码.它们是相同的图像,所以我在两个地方都有相同的环境.

诀窍是我喜欢对我的所有编码使用版本控制,即使我没有与其他人协调.我希望在我使用的任何系统上看到我的代码的最新版本.

我不想一直依赖于网络访问 - 我可能在没有Wi-Fi的情况下进行编码(是的,它很少见,但有些地方仍处于石器时代).我正在考虑使用git,但是如果我在本地提供了存储库,那么像SVN这样的东西也可以.或者笔记本电脑可能成为SVN服务器,桌面也可以访问它.

有没有人以前做过这种事情?任何陷阱/陷阱/经验教训?

svn git version-control

7
推荐指数
2
解决办法
524
查看次数

ActiveRecord #find得到错误的对象类

我有两个模型:CreditCard和BlacklistItem :: CreditCard.如果我首先搜索BlacklistItem :: CreditCard,我会得到预期的行为:

>> BlacklistItem::CreditCard.find(:all).first
=> #<BlacklistItem::CreditCard id: 5, *snip* >
>> 
Run Code Online (Sandbox Code Playgroud)

如果我首先搜索一个CreditCard,当我去找BlacklistItem :: CreditCard项目后,我会得到意想不到的行为:

>> CreditCard.find(:all).first
=> #<CreditCard id: 2, key_id: 4, *snip* >
>> BlacklistItem::CreditCard.find(:all).first
(irb):2: warning: toplevel constant CreditCard referenced by BlacklistItem::CreditCard
=> #<CreditCard id: 2, key_id: 4, *snip* >
>> 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?只是不可能在他们之间拥有这种关系的名字吗?我将重命名BlacklistItem :: CreditCard作为解决方法,但它确实是这个特定对象的最佳名称.

ruby activerecord ruby-on-rails

1
推荐指数
1
解决办法
198
查看次数