<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>yume (yume)</title>
    <link>https://ruby-china.org/yume</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>解决可恶的双重提交问题 (jQuery)</title>
      <description>&lt;p&gt;当表单提交时会出现延迟，有时是几秒或者更长，这使得用户会多次提交按钮，从而给服务器端代码带来了诸多麻烦。“多次提交，会产生多条同样的数据”，这是在过去 4 年里，作为软件测试人员的我，经常性提交的 Bug。&lt;/p&gt;

&lt;p&gt;现在，就来&lt;strong&gt;解决可恶的双重提交问题&lt;/strong&gt;(请参看《jQuery 实战》第二版 - 第 54 页)：
 &lt;img src="//l.ruby-china.com/photo/00b38847a07c38a4b74e92bc4a6f5fd6.png" title="" alt=""&gt;
针对上表单，请注意，需要考虑两种情况下的提交：&lt;/p&gt;

&lt;p&gt;&lt;code&gt;1. 第一次提交&lt;/code&gt;
&lt;code&gt;2. 该表单未通过验证后，再一次提交&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;这两种情况的提交下，表单如未指定 id，那么 id 是变动的。如果实现为：
&lt;img src="//l.ruby-china.com/photo/5e87366ece382bf12926de0e884e9885.png" title="" alt=""&gt;
上述，只能解决第一种情况下的双重提交问题。此时，需要改进选择器为：&lt;strong&gt;匹配特性值开头部分&lt;/strong&gt;。如下
&lt;img src="//l.ruby-china.com/photo/dcb0850503372a075ba1e2b47214d2e4.png" title="" alt=""&gt;
这样的话，就能解决两种情况下的双重提交问题。&lt;/p&gt;

&lt;p&gt;当然，也可以直接定义表单的 id 为  :id =&amp;gt; "new_post"
&lt;img src="//l.ruby-china.com/photo/9f645630cf50b6c555e3fd9534476c4d.png" title="" alt=""&gt;
从七月开始，我已不再从事软件测试。&lt;strong&gt;以前，总是不停地找问题; 现在，不仅要找问题，还要解决问题&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;前几天，老大问我们：&lt;strong&gt;是喜欢研究，还是具体实现&lt;/strong&gt;。我是一个喜欢享受过程的菜鸟。
还有，&lt;strong&gt;人有时不需要太聪明。太聪明了，生活就不容易简单了&lt;/strong&gt;。&lt;/p&gt;</description>
      <author>yume</author>
      <pubDate>Sat, 03 Nov 2012 16:36:51 +0800</pubDate>
      <link>https://ruby-china.org/topics/6499</link>
      <guid>https://ruby-china.org/topics/6499</guid>
    </item>
    <item>
      <title>"Omniauth pure"上，实现国产 OAuth 认证</title>
      <description>&lt;p&gt;在"Omniauth pure"的基础上，实现国产 OAuth 认证（weibo，tqq，douban，renren），除了对代码的调整，还有对 weibo，tqq，douban，renren 创建授权应用。各位，在 weibo 等 OAuth 认证时，会出现各种各样的授权问题，特头疼。还是慢慢解决吧。&lt;/p&gt;
&lt;h2 id="该project增加如下："&gt;该 project 增加如下：&lt;/h2&gt;
&lt;p&gt;"Omniauth pure" 的来源：&lt;a href="https://github.com/markusproske/omniauth_pure" rel="nofollow" target="_blank"&gt;https://github.com/markusproske/omniauth_pure&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="1. Gemfile文件，增加："&gt;1. Gemfile 文件，增加：&lt;/h2&gt;
&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/2bb2ba503623e42f002701adad0745ae.png" title="" alt=""&gt;
针对 weibo，tqq 认证，直接在 Gemfile 中 gem 就好，在 Omniauth 的 List-of-Strategies 中即可找到。（&lt;a href="https://github.com/intridea/omniauth/wiki/List-of-Strategies" rel="nofollow" target="_blank"&gt;https://github.com/intridea/omniauth/wiki/List-of-Strategies&lt;/a&gt;）&lt;/p&gt;
&lt;h2 id="2. lib目录下，增加mniauth / strategies目录，存放douban.rb，renren.rb 来源于"&gt;2. lib 目录下，增加 mniauth / strategies 目录，存放 douban.rb，renren.rb 来源于&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/liluo/omniauth-douban-oauth2/blob/master/lib/omniauth/strategies/douban.rb" rel="nofollow" target="_blank"&gt;https://github.com/liluo/omniauth-douban-oauth2/blob/master/lib/omniauth/strategies/douban.rb&lt;/a&gt;
&lt;a href="https://github.com/ballantyne/omniauth-renren/blob/master/lib/omniauth/strategies/renren.rb" rel="nofollow" target="_blank"&gt;https://github.com/ballantyne/omniauth-renren/blob/master/lib/omniauth/strategies/renren.rb&lt;/a&gt;
&lt;img src="//l.ruby-china.com/photo/e37ded6e84c6b612af89602cfb1517f4.png" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="3. config/environments/development.rb，增加："&gt;3. config/environments/development.rb，增加：&lt;/h2&gt;
&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/1760009d545dca4259eef68323c579e2.png" title="" alt=""&gt;
注：KEY，SECRET 值，请用相应的授权应用的值。&lt;/p&gt;
&lt;h2 id="4 app/views/layouts/application.html.erb，增加："&gt;4 app/views/layouts/application.html.erb，增加：&lt;/h2&gt;
&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/cf24a896d64837a92848c940cfff886c.png" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="5. app/controllers/services_controller.rb，增加："&gt;5. app/controllers/services_controller.rb，增加：&lt;/h2&gt;
&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/d86ec95887da0f937463ded0c87668cc.png" title="" alt=""&gt;
并在该 controller 的 create 方法中，增加
&lt;img src="//l.ruby-china.com/photo/4159a8e08e3e651a2d1aa610d66e63fe.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;增加上述信息，就可以实现相应的认证。&lt;/p&gt;
&lt;h2 id="在实现过程中，总是出现版本依赖问题，或者授权问题，俺这个新手，又对OAuth认证很茫然。老大经常叫我“郁闷（yume）”，哎，总归如此。"&gt;在实现过程中，总是出现版本依赖问题，或者授权问题，俺这个新手，又对 OAuth 认证很茫然。老大经常叫我“郁闷（yume）”，哎，总归如此。&lt;/h2&gt;&lt;h2 id="1. douban认证(采用的是auth2)"&gt;1. douban 认证 (采用的是 auth2)&lt;/h2&gt;
&lt;p&gt;在 Omniauth 的 List-of-Strategies 没有支持 douban 的 gem，但是在 Github 目录下能搜索到两组： &lt;/p&gt;
&lt;h2 id="1）ballantyne/omniauth-douban"&gt;1）ballantyne/omniauth-douban&lt;/h2&gt;
&lt;p&gt;使用时，总是提示：400 Bad Request (OAuth::Unauthorized) (很明显它是依赖的 omniauth-auth)
    Scott Ballantyne 提到：originally douban used oauth 1, but now it uses oauth2. 
        maybe try &lt;a href="https://github.com/liluo/omniauth-douban-oauth2" rel="nofollow" target="_blank"&gt;https://github.com/liluo/omniauth-douban-oauth2&lt;/a&gt;
    说实话，应该早点找 Scott Ballantyne(&lt;a href="/shichuan" class="user-mention" title="@shichuan"&gt;&lt;i&gt;@&lt;/i&gt;shichuan&lt;/a&gt;)，要不就不会一直看着 400 Bad Request (OAuth::Unauthorized)，郁闷了很久。&lt;/p&gt;
&lt;h2 id="2）liluo/omniauth-douban-oauth2"&gt;2）liluo/omniauth-douban-oauth2&lt;/h2&gt;
&lt;p&gt;gem 后，在 bundle install 时，会提示：omniauth-auth2 版本冲突问题。
   所以，老大就建议直接引用 liluo/omniauth-douban-oauth2 / lib / omniauth / strategies / douban.rb，将该文件放在 Omniauth pure/ lib / omniauth / strategies 下，然后在 config/environments/development.rb 中
provider :douban, ENV['DOUBAN_KEY'], ENV['DOUBAN_SECRET'] 之前，先 require 'omniauth/strategies/douban.rb'，其他并无任何改动，这样就可以实现 douban 认证&lt;/p&gt;
&lt;h2 id="2. renren认证(采用的是auth2)"&gt;2. renren 认证 (采用的是 auth2)&lt;/h2&gt;&lt;h2 id="1) ballantyne / omniauth-renren"&gt;1) ballantyne / omniauth-renren&lt;/h2&gt;
&lt;p&gt;renren 认证时，同样采用 douban 认证的方式，但是觉得一切都 ok 时，可总是提示：
    error:invalid_request
    error_description:Invalid redirect_uri.
   原因在于没有在授权 renren 应用时，没有填写对应用根地址，应用回调地址。&lt;/p&gt;

&lt;p&gt;weibo，tqq，douban，renren 的认证总算搞定了，说实话，对 OAuth 认证，具体的信息还是不明确。明天，另一位同事来了，就可以进行下面的工作了。&lt;/p&gt;
&lt;h2 id="Fighting,Fighting,Fighting.人就是在总是在各式各样的鼓励下，不断茁壮成长的。"&gt;Fighting,Fighting,Fighting.人就是在总是在各式各样的鼓励下，不断茁壮成长的。&lt;/h2&gt;&lt;h2 id="人生，其实也挺简单！"&gt;人生，其实也挺简单！&lt;/h2&gt;
&lt;p&gt;上述，纯属记录。（有任何問題，再說）&lt;/p&gt;</description>
      <author>yume</author>
      <pubDate>Thu, 01 Nov 2012 18:34:51 +0800</pubDate>
      <link>https://ruby-china.org/topics/6464</link>
      <guid>https://ruby-china.org/topics/6464</guid>
    </item>
  </channel>
</rss>
