Update README.md (#52)
corrected syntax, outdated url and added translation
This commit is contained in:
parent
2317eb2bda
commit
4c27244d13
38
README.md
38
README.md
|
@ -4,7 +4,7 @@
|
||||||
[![Build Status](https://travis-ci.org/huacnlee/rucaptcha.svg)](https://travis-ci.org/huacnlee/rucaptcha)
|
[![Build Status](https://travis-ci.org/huacnlee/rucaptcha.svg)](https://travis-ci.org/huacnlee/rucaptcha)
|
||||||
[![Code Climate](https://codeclimate.com/github/huacnlee/rucaptcha/badges/gpa.svg)](https://codeclimate.com/github/huacnlee/rucaptcha)
|
[![Code Climate](https://codeclimate.com/github/huacnlee/rucaptcha/badges/gpa.svg)](https://codeclimate.com/github/huacnlee/rucaptcha)
|
||||||
|
|
||||||
This is a Captcha gem for Rails Applications. It drawing captcha image with C code.
|
This is a Captcha gem for Rails Applications which generates captcha image by C code.
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ This is a Captcha gem for Rails Applications. It drawing captcha image with C co
|
||||||
|
|
||||||
## Feature
|
## Feature
|
||||||
|
|
||||||
- No dependencies. No ImageMagick, No RMagick.
|
- No dependencies. No ImageMagick. No RMagick;
|
||||||
- For Rails Application;
|
- For Rails Application;
|
||||||
- Simple, Easy to use;
|
- Simple, Easy to use;
|
||||||
- High performance.
|
- High performance.
|
||||||
|
@ -29,14 +29,6 @@ gem 'rucaptcha'
|
||||||
|
|
||||||
Create `config/initializers/rucaptcha.rb`
|
Create `config/initializers/rucaptcha.rb`
|
||||||
|
|
||||||
RuCaptcha 没有使用 Rails Session 来存储验证码信息,因为 Rails 的默认 Session 是存储在 Cookie 里面,如果验证码存在里面会存在 [Replay attack](https://en.wikipedia.org/wiki/Replay_attack) 漏洞,导致验证码关卡被攻破。
|
|
||||||
|
|
||||||
所以我在设计上要求 RuCaptcha 得配置一个可以支持分布式的后端存储方案例如:Memcached 或 Redis 以及其他可以支持分布式的 cache_store 方案。
|
|
||||||
|
|
||||||
同时,为了保障易用性,默认会尝试使用 `:file_store` 的方式,将验证码存在应用程序的 `tmp/cache/rucaptcha/session` 目录(但请注意,多机器部署这样是无法正常运作的)。
|
|
||||||
|
|
||||||
所以,我建议大家使用的时候,配置上 `cache_store` (详见 [Rails Guides 缓存配置部分](http://guides.ruby-china.org/caching_with_rails.html#%E9%85%8D%E7%BD%AE)的文档)到一个 Memcached 或 Redis,这才是最佳实践。
|
|
||||||
|
|
||||||
```rb
|
```rb
|
||||||
RuCaptcha.configure do
|
RuCaptcha.configure do
|
||||||
# Color style, default: :colorful, allows: [:colorful, :black_white]
|
# Color style, default: :colorful, allows: [:colorful, :black_white]
|
||||||
|
@ -53,9 +45,27 @@ RuCaptcha.configure do
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
|
RuCaptcha 没有使用 Rails Session 来存储验证码信息,因为 Rails 的默认 Session 是存储在 Cookie 里面,如果验证码存在里面会存在 [Replay attack](https://en.wikipedia.org/wiki/Replay_attack) 漏洞,导致验证码关卡被攻破。
|
||||||
|
|
||||||
|
所以我在设计上要求 RuCaptcha 得配置一个可以支持分布式的后端存储方案例如:Memcached 或 Redis 以及其他可以支持分布式的 cache_store 方案。
|
||||||
|
|
||||||
|
同时,为了保障易用性,默认会尝试使用 `:file_store` 的方式,将验证码存在应用程序的 `tmp/cache/rucaptcha/session` 目录(但请注意,多机器部署这样是无法正常运作的)。
|
||||||
|
|
||||||
|
所以,我建议大家使用的时候,配置上 `cache_store` (详见 [Rails Guides 缓存配置部分](https://ruby-china.github.io/rails-guides/caching_with_rails.html#%E9%85%8D%E7%BD%AE)的文档)到一个 Memcached 或 Redis,这才是最佳实践。
|
||||||
|
|
||||||
|
#
|
||||||
|
(RuCaptha do not use Rails Session to store captcha information. As the default session is stored in Cookie in Rails, there's a [Replay attack](https://en.wikipedia.org/wiki/Replay_attack) bug which may causes capthcha being destroyed if we store captcha in Rails Session.
|
||||||
|
|
||||||
|
So in my design I require RuCaptcha to configure a distributed backend storage scheme, such as Memcached, Redis or other cache_store schemes which support distribution.
|
||||||
|
|
||||||
|
Meanwhile, for the ease of use, RuCapthca would try to use `:file_store` by default and store the capthca in `tmp/cache/rucaptcha/session` directory (kindly note that it's not working if deploy on multiple machine).
|
||||||
|
|
||||||
|
For recommendation, configure the `cache_store`(more details on [Rails Guides Configuration of Cache Stores](http://guides.rubyonrails.org/caching_with_rails.html#configuration)) to Memcached or Redis, that would be the best practice.)
|
||||||
|
#
|
||||||
|
|
||||||
Controller `app/controller/account_controller.rb`
|
Controller `app/controller/account_controller.rb`
|
||||||
|
|
||||||
When you called `verify_rucaptcha?`, it will uses value from `params[:_rucaptcha]` to validation.
|
When you called `verify_rucaptcha?`, it uses value from `params[:_rucaptcha]` to validate.
|
||||||
|
|
||||||
```rb
|
```rb
|
||||||
class AccountController < ApplicationController
|
class AccountController < ApplicationController
|
||||||
|
@ -81,7 +91,7 @@ class ForgotPasswordController < ApplicationController
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
> TIP: Sometime you may need keep last verified captcha code in session on `verify_rucaptcha?` method call, you can use `keep_session: true`. For example: `verify_rucaptcha? @user, keep_session: true`.
|
> TIP: Sometimes you may need to keep last verified captcha code in session on `verify_rucaptcha?` method call, you can use `keep_session: true`. For example: `verify_rucaptcha? @user, keep_session: true`.
|
||||||
|
|
||||||
View `app/views/account/new.html.erb`
|
View `app/views/account/new.html.erb`
|
||||||
|
|
||||||
|
@ -100,7 +110,7 @@ View `app/views/account/new.html.erb`
|
||||||
</form>
|
</form>
|
||||||
```
|
```
|
||||||
|
|
||||||
And if you are use Devise, you can read this to add validation: [RuCaptcha with Devise](https://github.com/huacnlee/rucaptcha/wiki/Working-with-Devise).
|
And if you are using [Devise](https://github.com/plataformatec/devise), you can read this reference to add validation: [RuCaptcha with Devise](https://github.com/huacnlee/rucaptcha/wiki/Working-with-Devise).
|
||||||
|
|
||||||
### Write your test skip captcha validation
|
### Write your test skip captcha validation
|
||||||
|
|
||||||
|
@ -132,7 +142,7 @@ end
|
||||||
### Invalid message without Devise
|
### Invalid message without Devise
|
||||||
|
|
||||||
When you are using this gem without Devise, you may find out that the invalid message is missing.
|
When you are using this gem without Devise, you may find out that the invalid message is missing.
|
||||||
For this case, use the trick below to manually add your i18n invalid message.
|
For this case, use the trick below to add your i18n invalid message manually.
|
||||||
|
|
||||||
```rb
|
```rb
|
||||||
if verify_rucaptcha?(@user) && @user.save
|
if verify_rucaptcha?(@user) && @user.save
|
||||||
|
|
Loading…
Reference in New Issue