tiny_passport 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. checksums.yaml +7 -0
  2. data/app/ables/tiny_passport/account_validate_able.rb +24 -0
  3. data/app/ables/tiny_passport/aggrement_term_able.rb +28 -0
  4. data/app/ables/tiny_passport/formable.rb +17 -0
  5. data/app/ables/tiny_passport/query_able.rb +25 -0
  6. data/app/controllers/tiny_passport/application_controller.rb +1 -0
  7. data/app/displays/tiny_passport/account_display.rb +25 -0
  8. data/app/displays/tiny_passport/oauth_login_display.rb +21 -0
  9. data/app/displays/tiny_passport/oauth_token_display.rb +25 -0
  10. data/app/errors/tiny_passport/alert_authorized_error.rb +6 -0
  11. data/app/errors/tiny_passport/unauthorized_error.rb +6 -0
  12. data/app/forms/tiny_passport/account_active_form.rb +83 -0
  13. data/app/forms/tiny_passport/account_form.rb +6 -0
  14. data/app/forms/tiny_passport/confirmation_token_form.rb +58 -0
  15. data/app/forms/tiny_passport/oauth/bind_connect_form.rb +65 -0
  16. data/app/forms/tiny_passport/oauth/bind_disconnect_form.rb +42 -0
  17. data/app/forms/tiny_passport/oauth/callback_form.rb +165 -0
  18. data/app/forms/tiny_passport/oauth/login_connect_form.rb +63 -0
  19. data/app/forms/tiny_passport/registration_form.rb +172 -0
  20. data/app/forms/tiny_passport/remember_token_auth_form.rb +32 -0
  21. data/app/forms/tiny_passport/reset_password_form.rb +95 -0
  22. data/app/forms/tiny_passport/reset_password_token_form.rb +55 -0
  23. data/app/forms/tiny_passport/session_form.rb +116 -0
  24. data/app/forms/tiny_passport/update_password_form.rb +50 -0
  25. data/app/forms/tiny_passport/welcome_email_form.rb +47 -0
  26. data/app/helpers/tiny_passport/application_helper.rb +1 -0
  27. data/app/mailers/tiny_passport/registration_mailer.rb +23 -0
  28. data/app/mailers/tiny_passport/reset_password_mailer.rb +16 -0
  29. data/app/models/concerns/tiny_passport/account_authenticatable.rb +24 -0
  30. data/app/models/tiny_passport/account.rb +41 -0
  31. data/app/models/tiny_passport/avatar.rb +6 -0
  32. data/app/models/tiny_passport/login_email.rb +89 -0
  33. data/app/models/tiny_passport/login_record.rb +69 -0
  34. data/app/models/tiny_passport/oauth_bind.rb +9 -0
  35. data/app/models/tiny_passport/oauth_info.rb +8 -0
  36. data/app/models/tiny_passport/oauth_login.rb +28 -0
  37. data/app/models/tiny_passport/oauth_token.rb +57 -0
  38. data/app/queries/tiny_passport/account_query.rb +45 -0
  39. data/app/services/tiny_passport/account_service.rb +43 -0
  40. data/app/services/tiny_passport/email_send_service.rb +32 -0
  41. data/app/services/tiny_passport/oauth_service.rb +11 -0
  42. data/app/views/layouts/tiny_passport/mailer.html.erb +7 -0
  43. data/app/views/tiny_passport/registration_mailer/send_confirmation_token.html.erb +5 -0
  44. data/app/views/tiny_passport/registration_mailer/welcome.html.erb +5 -0
  45. data/app/views/tiny_passport/reset_password_mailer/send_token.html.erb +5 -0
  46. data/config/locales/en/forms.en.yml +81 -0
  47. data/config/locales/zh-CN/forms.zh-CN.yml +123 -0
  48. data/config/routes.rb +1 -0
  49. data/db/migrate/20131105103853_create_tiny_passport_accounts.rb +23 -0
  50. data/db/migrate/20131105104415_create_tiny_passport_login_records.rb +20 -0
  51. data/db/migrate/20131105104559_create_tiny_passport_oauth_tokens.rb +27 -0
  52. data/db/migrate/20131105104632_create_tiny_passport_oauth_logins.rb +15 -0
  53. data/db/migrate/20131105104702_create_tiny_passport_oauth_binds.rb +16 -0
  54. data/db/migrate/20131105104738_create_tiny_passport_oauth_infos.rb +13 -0
  55. data/db/migrate/20131105104847_create_tiny_passport_avatars.rb +20 -0
  56. data/db/migrate/20131107031935_create_tiny_passport_login_emails.rb +25 -0
  57. data/lib/omniauth/strategies/qq_connect.rb +114 -0
  58. data/lib/tiny_passport/config.rb +72 -0
  59. data/lib/tiny_passport/engine.rb +16 -0
  60. data/lib/tiny_passport/http_authable.rb +50 -0
  61. data/lib/tiny_passport/http_authcenter.rb +138 -0
  62. data/lib/tiny_passport/mailerable.rb +20 -0
  63. data/lib/tiny_passport/omniauth/strategable.rb +21 -0
  64. data/lib/tiny_passport/version.rb +2 -1
  65. data/lib/tiny_passport.rb +13 -0
  66. data/test/dummy/app/controllers/application_controller.rb +1 -0
  67. data/test/dummy/app/helpers/application_helper.rb +1 -0
  68. data/test/dummy/config/application.rb +1 -0
  69. data/test/dummy/config/boot.rb +1 -0
  70. data/test/dummy/config/environment.rb +1 -0
  71. data/test/dummy/config/environments/development.rb +1 -0
  72. data/test/dummy/config/environments/production.rb +1 -0
  73. data/test/dummy/config/environments/test.rb +1 -0
  74. data/test/dummy/config/initializers/backtrace_silencers.rb +1 -0
  75. data/test/dummy/config/initializers/filter_parameter_logging.rb +1 -0
  76. data/test/dummy/config/initializers/inflections.rb +1 -0
  77. data/test/dummy/config/initializers/mime_types.rb +1 -0
  78. data/test/dummy/config/initializers/secret_token.rb +1 -0
  79. data/test/dummy/config/initializers/session_store.rb +1 -0
  80. data/test/dummy/config/initializers/wrap_parameters.rb +1 -0
  81. data/test/dummy/config/routes.rb +1 -0
  82. data/test/dummy/db/schema.rb +138 -0
  83. data/test/dummy/db/test.sqlite3 +0 -0
  84. data/test/dummy/log/test.log +15986 -0
  85. data/test/dummy/tmp/cache/271/2A1/tiny_cache%2Fmodels%2FTinyPassport%3A%3AAccount%2F1%2F1 +0 -0
  86. data/test/dummy/tmp/cache/EDF/4C1/tiny_cache%2Fmodel_uniq_keys%2FTinyPassport%3A%3ALoginEmail%2F%5B%5B%22account_id%22%2C+1%5D%5D +1 -0
  87. data/test/fixtures/tiny_passport/avatars.yml +23 -0
  88. data/test/fixtures/tiny_passport/login_emails.yml +23 -0
  89. data/test/fixtures/tiny_passport/login_records.yml +17 -0
  90. data/test/fixtures/tiny_passport/oauth_binds.yml +13 -0
  91. data/test/fixtures/tiny_passport/oauth_infos.yml +9 -0
  92. data/test/fixtures/tiny_passport/oauth_logins.yml +11 -0
  93. data/test/fixtures/tiny_passport/oauth_tokens.yml +21 -0
  94. data/test/fixtures/tiny_passport/users.yml +13 -0
  95. data/test/forms/tiny_passport/oauth/callback_form_test.rb +23 -0
  96. data/test/forms/tiny_passport/registration_form_test.rb +112 -0
  97. data/test/forms/tiny_passport/session_form_test.rb +139 -0
  98. data/test/forms/tiny_passport/update_password_form_test.rb +20 -0
  99. data/test/integration/navigation_test.rb +1 -0
  100. data/test/mailers/tiny_passport/registration_mailer_test.rb +10 -0
  101. data/test/mailers/tiny_passport/reset_password_mailer_test.rb +10 -0
  102. data/test/models/concerns/tiny_passport/configable_test.rb +46 -0
  103. data/test/models/tiny_passport/account_test.rb +8 -0
  104. data/test/models/tiny_passport/avatar_test.rb +10 -0
  105. data/test/models/tiny_passport/login_email_test.rb +10 -0
  106. data/test/models/tiny_passport/login_record_test.rb +10 -0
  107. data/test/models/tiny_passport/oauth_bind_test.rb +10 -0
  108. data/test/models/tiny_passport/oauth_info_test.rb +10 -0
  109. data/test/models/tiny_passport/oauth_login_test.rb +10 -0
  110. data/test/models/tiny_passport/oauth_token_test.rb +10 -0
  111. data/test/support/helpers.rb +66 -0
  112. data/test/test_helper.rb +24 -0
  113. data/test/tiny_passport_test.rb +1 -0
  114. metadata +257 -69
@@ -0,0 +1,89 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinyPassport
3
+ class LoginEmail < ActiveRecord::Base
4
+ include ::TinySupport::Configable
5
+
6
+ self.acts_as_tiny_cached :version => 1
7
+
8
+ # 邮箱的激活情况
9
+ self.tiny_support_config :status, [
10
+ {:key => 'default', :value => 0}, # 初始状态
11
+ {:key => 'pending', :value => 1}, # 需要验证
12
+ {:key => 'active', :value => 2}, # 激活状态
13
+ {:key => 'lock', :value => 3}, # 已经锁定,需要邮箱激活
14
+ {:key => 'block', :value => 4}, # 已经被屏蔽
15
+ {:key => 'deleted', :value => -1} # 已经删除
16
+ ]
17
+
18
+ belongs_to :account, :class_name => "TinyPassport::Account"
19
+
20
+ attr_accessor :confirmation_token, :reset_password_token
21
+
22
+ attr_accessible :account
23
+
24
+ # confirmation_token ----------------------------------------------
25
+ def generate_encrypted_confirmation_token
26
+ self.confirmation_token = ::SecureRandom.base64
27
+ self.encrypted_confirmation_token = self.class.generate_encrypted_confirmation_token(self.confirmation_token)
28
+ end
29
+
30
+ def valid_confirmation_token?(token)
31
+ self.encrypted_confirmation_token == self.class.generate_encrypted_confirmation_token(token)
32
+ end
33
+
34
+ # 验证是否过期?
35
+ def confirmation_token_expires?
36
+ !!self.confirmation_send_at &&
37
+ self.confirmation_send_at + ::TinyPassport.config.login_email_confirmation_token_expires_in < Time.now
38
+ end
39
+
40
+ # return login_email or nil
41
+ def self.authenticate_from_confirmation_token token=''
42
+ encode_token = self.generate_encrypted_confirmation_token(token)
43
+
44
+ self.find_by_encrypted_confirmation_token(encode_token)
45
+ end
46
+
47
+ def self.generate_encrypted_confirmation_token(token)
48
+ Digest::SHA1.hexdigest("#{token}")
49
+ end
50
+
51
+ # 邮箱状态激活
52
+ def status_active_verify!
53
+ self.confirmation_token = nil
54
+ self.confirmed_at = Time.now
55
+ self.confirmation_send_at = nil
56
+ self.status_key = 'active'
57
+ self.encrypted_confirmation_token = ''
58
+ self.save!
59
+ end
60
+
61
+ # reset_password_token ----------------------------------------------
62
+ def generate_encrypted_reset_password_token
63
+ self.reset_password_token = ::SecureRandom.base64
64
+ self.encrypted_reset_password_token = self.class.generate_encrypted_reset_password_token(self.reset_password_token)
65
+ end
66
+
67
+ def valid_reset_password_token?(token)
68
+ self.encrypted_reset_password_token == self.class.generate_encrypted_reset_password_token(token)
69
+ end
70
+
71
+ # 验证是否过期?
72
+ def reset_password_token_expires?
73
+ !!self.reset_password_token_send_at &&
74
+ self.reset_password_token_send_at + ::TinyPassport.config.login_email_reset_password_token_expires_in < Time.now
75
+ end
76
+
77
+ # return login_email or nil
78
+ def self.authenticate_from_reset_password_token token=''
79
+ encode_token = self.generate_encrypted_reset_password_token(token)
80
+
81
+ self.find_by_encrypted_reset_password_token(encode_token)
82
+ end
83
+
84
+ def self.generate_encrypted_reset_password_token(token)
85
+ Digest::SHA1.hexdigest("#{token}")
86
+ end
87
+
88
+ end
89
+ end
@@ -0,0 +1,69 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinyPassport
3
+ class LoginRecord < ActiveRecord::Base
4
+ include ::TinySupport::Configable
5
+
6
+ # status_value
7
+ self.tiny_support_config :way, [
8
+ {:key => 'default', :value => 0},
9
+ {:key => 'login_name', :value => 201},
10
+ {:key => 'login_email', :value => 301},
11
+ {:key => 'after_login_email_actived', :value => 302}, # 在邮箱激活之后自动登录
12
+
13
+ # oauth
14
+ {:key => 'oauth_qq_connect', :value => 401},
15
+ {:key => 'oauth_weibo', :value => 402},
16
+ {:key => 'oauth_github', :value => 403},
17
+ {:key => 'oauth_google', :value => 404}
18
+ ]
19
+
20
+ attr_accessor :remember_token
21
+
22
+ belongs_to :account, :class_name => "TinyPassport::Account", :counter_cache => :login_records_count
23
+
24
+ # 创建之前需要确认是否生成记住密码的token
25
+ before_create do |r|
26
+ if r.remembered?
27
+ r.remember_token = ::SecureRandom.hex(64)
28
+ r.encrypted_remember_token = r.class.generate_encrypted_remember_token(r.remember_token)
29
+ r.remember_expires_at = 3.months.from_now
30
+ end
31
+ end
32
+
33
+ after_create do |r|
34
+ if r.account
35
+ r.account.update_columns(
36
+ :last_login_at => r.created_at,
37
+ :last_login_record_id => r.id
38
+ )
39
+ end
40
+ end
41
+
42
+ def remembered?
43
+ !!remembered
44
+ end
45
+
46
+ def available?
47
+ self.remember_sign_out_at.nil? &&
48
+ self.remember_expires_at.is_a?(::Time) &&
49
+ self.remember_expires_at > Time.now
50
+ end
51
+
52
+ # 校验是否符合
53
+ def valid_remember_token?(token)
54
+ self.encrypted_remember_token == self.class.generate_encrypted_remember_token(token)
55
+ end
56
+
57
+ # return login_record or nil
58
+ def self.authenticate_from_remember_token token=''
59
+ encode_token = self.generate_encrypted_remember_token(token)
60
+
61
+ self.find_by_encrypted_remember_token(encode_token)
62
+ end
63
+
64
+ def self.generate_encrypted_remember_token(token)
65
+ Digest::SHA1.hexdigest("#{token}")
66
+ end
67
+
68
+ end
69
+ end
@@ -0,0 +1,9 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinyPassport
3
+ class OauthBind < ActiveRecord::Base
4
+ belongs_to :account, :class_name => "TinyPassport::Account"
5
+ belongs_to :oauth_token, :class_name => "TinyPassport::OauthToken"
6
+
7
+ attr_accessible :account, :oauth_token
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinyPassport
3
+ class OauthInfo < ActiveRecord::Base
4
+ belongs_to :oauth_token, :class_name => "TinyPassport::OauthToken"
5
+
6
+ attr_accessible :oauth_token
7
+ end
8
+ end
@@ -0,0 +1,28 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinyPassport
3
+ class OauthLogin < ActiveRecord::Base
4
+ include ::TinySupport::Configable
5
+
6
+ self.acts_as_tiny_cached :version => 1
7
+ self.tiny_support_display
8
+
9
+ belongs_to :account, :class_name => "TinyPassport::Account"
10
+ belongs_to :oauth_token, :class_name => "TinyPassport::OauthToken"
11
+
12
+ # 邮箱的激活情况
13
+ self.tiny_support_config :status, [
14
+ {:key => 'default', :value => 0 }, # 初始状态
15
+ {:key => 'pending', :value => 1 }, # 需要验证
16
+ {:key => 'active', :value => 2 }, # 激活状态
17
+ {:key => 'lock', :value => 3 }, # 已经锁定,需要邮箱激活
18
+ {:key => 'block', :value => 4 }, # 已经被屏蔽
19
+ {:key => 'deleted', :value => -1 } # 已经删除
20
+ ]
21
+
22
+ attr_accessible :account, :oauth_token
23
+
24
+ def oauth_token?
25
+ !!oauth_token
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,57 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinyPassport
3
+ class OauthToken < ActiveRecord::Base
4
+ include ::TinySupport::Configable
5
+ # 用于登录的
6
+ has_one :oauth_login, :class_name => "TinyPassport::OauthLogin"
7
+
8
+ self.acts_as_tiny_cached :version => 1
9
+ self.tiny_support_display
10
+
11
+ # 长字段信息
12
+ has_one :oauth_info, :class_name => "TinyPassport::OauthInfo"
13
+ # 被绑定的
14
+ has_many :oauth_binds, :class_name => "TinyPassport::OauthBind"
15
+ # 被绑定的账户信息
16
+ has_many :bind_accounts, :class_name => "TinyPassport::Account", :through => :oauth_binds, :source => :account
17
+
18
+ self.tiny_support_config :strategy_type, [
19
+ {:key => 'qq_connect', :value => 1}
20
+ ]
21
+
22
+ attr_accessible :strategy_type_value,
23
+ :strategy_id,
24
+ :access_token,
25
+ :access_secret,
26
+ :expires_at,
27
+ :origin_avatar_url,
28
+ :name,
29
+ :nick_name
30
+
31
+ def strategy_name
32
+ I18n.t("tiny_passport.oauth.providers.#{self.strategy_type_key}.name")
33
+ end
34
+
35
+ # 已经绑定登录帐号了
36
+ def login_account?
37
+ !!(self.login_account)
38
+ end
39
+
40
+ def oauth_login?
41
+ !!(self.oauth_login)
42
+ end
43
+
44
+ def login_account
45
+ self.oauth_login? ? self.oauth_login.account : nil
46
+ end
47
+
48
+ def bind_accounts?
49
+ self.bind_accounts.to_a.any?
50
+ end
51
+
52
+ def not_login_connect_to? key
53
+ key == self.strategy_type_key && !(self.login_account?)
54
+ end
55
+
56
+ end
57
+ end
@@ -0,0 +1,45 @@
1
+ module TinyPassport
2
+ class AccountQuery
3
+ include ::TinyPassport::QueryAble
4
+
5
+ attr_reader :account
6
+
7
+ def initialize account
8
+ @account = account
9
+ end
10
+
11
+ # {
12
+ # :oauth_logins => [
13
+ # {
14
+ # :strategy => {:type => :taobao, :id => 'ABCDEFGHIJK'},
15
+ # :nick_name => 'ABCE',
16
+ # :name => 'ABCE',
17
+ # :avatar => {
18
+ # :normal => '',
19
+ # :big => '',
20
+ # :origin => '',
21
+ # },
22
+ # :crated_at => '2013-12-30 23:22:34',
23
+ # :updated_at => '2013-12-30 23:22:34',
24
+ # :expires_at => '2013-12-30 23:22:34',
25
+ # :access_token => '',
26
+ # :access_secret => '',
27
+ # :status => {:value => 1, :key => :default}
28
+ # }
29
+ # ]
30
+ # }
31
+ def oauth_logins_data options={}
32
+ options = query_normalize_options options
33
+
34
+ oauth_logins = self.account.oauth_logins.joins(:oauth_token).page(options[:page] || 1).per(options[:per_page] || 20)
35
+
36
+ result = {}
37
+
38
+ result[:oauth_logins] = oauth_logins.map do |login|
39
+ login.display.basic
40
+ end
41
+
42
+ result
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,43 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinyPassport
3
+ class AccountService # 用户服务
4
+ include ::TinySupport::Serviceable
5
+
6
+ # TODO: 修改密码
7
+ def update_password_with_params params={}
8
+ form = ::TinyPassport::UpdatePasswordForm.new
9
+ form.submit params
10
+ form
11
+ end
12
+
13
+ # TODO: 重置密码
14
+ def reset_password_with_params params={}
15
+ form = ::TinyPassport::ResetPasswordForm.new
16
+ form.submit params
17
+ form
18
+ end
19
+
20
+ # TODO: 请求激活
21
+ def request_confirmation_token_with_params params={}
22
+ form = ::TinyPassport::ConfirmationTokenForm.new
23
+ form.submit params
24
+ form
25
+ end
26
+
27
+ # 生成一个重置密码的请求
28
+ # TODO:
29
+ def request_reset_password_with_params params={}
30
+ form = ::TinyPassport::ResetPasswordTokenForm.new
31
+ form.submit params
32
+ form
33
+ end
34
+
35
+ # 使用参数激活
36
+ def active_with_params params={}
37
+ form = ::TinyPassport::AccountActiveForm.new
38
+ form.submit params
39
+ form
40
+ end
41
+ end
42
+ end
43
+
@@ -0,0 +1,32 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinyPassport
3
+ # 邮箱发送服务
4
+ class EmailSendService
5
+ include ::TinySupport::Serviceable
6
+
7
+ # 用户激活后发送欢迎语
8
+ # TODO:
9
+ def send_welcome_for_active params={}
10
+ form = ::TinyPassport::WelcomeEmailForm.new
11
+ form.submit params
12
+ form
13
+ end
14
+
15
+ # 为login_email, 发送验证码
16
+ def send_confirmation_token_for_active params={}
17
+ form = ::TinyPassport::ConfirmationTokenForm.new
18
+ form.submit params
19
+ form
20
+ end
21
+
22
+ # 为了找回密码,来发送验证码
23
+ def send_confirmation_token_for_reset_password params={}
24
+ form = ::TinyPassport::RequestResetPasswordForm.new
25
+ form.submit params
26
+ form
27
+ end
28
+
29
+ private
30
+
31
+ end
32
+ end
@@ -0,0 +1,11 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module TinyPassport
3
+ # 第三方服务
4
+ class OuathService
5
+ include ::TinySupport::Serviceable
6
+
7
+ def update_oauth_data options={}
8
+ end
9
+ end
10
+ end
11
+
@@ -0,0 +1,7 @@
1
+ <h1>TinyPassport</h1>
2
+
3
+ <%= yield %>
4
+
5
+ <div style='padding: 10px;'>
6
+ <%= Time.now.to_s(:db) %>
7
+ </div>
@@ -0,0 +1,5 @@
1
+ <h2>Welcome <%= @account.login_name %></h2>
2
+
3
+ <p>
4
+ Your Confirmation Token Is <%= @login_email.confirmation_token %>
5
+ </p>
@@ -0,0 +1,5 @@
1
+ <h2>Welcome <%= @account.login_name %></h2>
2
+
3
+ <p>
4
+ Thanks for Register!
5
+ </p>
@@ -0,0 +1,5 @@
1
+ <h2>Hi <%= @account.login_name %></h2>
2
+
3
+ <p>
4
+ Welcome to Reset Your Password! Your token is <%= @login_email.reset_password_token %>
5
+ </p>
@@ -0,0 +1,81 @@
1
+ en:
2
+ tiny_passport:
3
+ oauth:
4
+ providers:
5
+ qq_connect:
6
+ name: 'QQ'
7
+
8
+ activemodel:
9
+ models:
10
+ tiny_passport/registration_form: 'Registration Infomation'
11
+ tiny_passport/session_form: 'Session'
12
+ tiny_passport/confirmation_token_form: 'Confirmation Token'
13
+ tiny_passport/reset_password_token_form: 'Reset Password Token'
14
+ attributes:
15
+ tiny_passport/reset_password_token_form:
16
+ login_email_value: Login Email
17
+
18
+ tiny_passport/confirmation_token_form:
19
+ login_email_value: Login Email
20
+
21
+ tiny_passport/session_form:
22
+ input_value: Login Name or Email
23
+
24
+ tiny_passport/registration_form:
25
+ login_email_value: Email
26
+ login_name: Login Name
27
+ password: Password
28
+ password_confirmation: Password Confirmation
29
+ agreement_terms: Agree with our agreement
30
+
31
+ errors:
32
+ models:
33
+ tiny_passport/registration_form:
34
+ attributes:
35
+ agreement_terms:
36
+ not_agree: Please Agree with our agreement
37
+
38
+ tiny_passport/confirmation_token_form:
39
+ attributes:
40
+ login_email_value:
41
+ already_active: 'already active'
42
+ not_found: 'not found'
43
+
44
+ tiny_passport/session_form:
45
+ attributes:
46
+ input_value:
47
+ login_email_not_exists: "email not exists"
48
+ login_name_not_exists: "login name not exists"
49
+ login_email_wrong: "login email wrong"
50
+ login_email_not_active: "email not active"
51
+ password:
52
+ wrong: "wrong"
53
+
54
+ tiny_passport/update_password_form:
55
+ attributes:
56
+ current_password:
57
+ not_matached: 'not match'
58
+ password:
59
+ not_changed: 'not change'
60
+
61
+ tiny_passport/reset_password_token_form:
62
+ attributes:
63
+ login_email_value:
64
+ not_found: 'not found'
65
+ not_active: 'not active'
66
+
67
+ tiny_passport/reset_password_form:
68
+ attributes:
69
+ base:
70
+ invalid: 'invalid'
71
+ reset_password_token:
72
+ not_found: 'not found'
73
+
74
+ tiny_passport/account_active_form:
75
+ attributes:
76
+ base:
77
+ invalid: 'invalid'
78
+ confirmation_token:
79
+ already_active: 'alreay active'
80
+ expired: 'expired'
81
+ not_matched: 'mismatch'
@@ -0,0 +1,123 @@
1
+ zh-CN:
2
+ tiny_passport:
3
+ oauth:
4
+ providers:
5
+ qq_connect:
6
+ name: 'QQ登录'
7
+ weibo:
8
+ name: '新浪微博'
9
+ github:
10
+ name: 'Github'
11
+ google:
12
+ name: 'Google'
13
+
14
+ activemodel:
15
+ models:
16
+ tiny_passport/registration_form: '注册信息'
17
+ tiny_passport/session_form: '登录信息'
18
+ tiny_passport/confirmation_token_form: '激活码'
19
+ tiny_passport/reset_password_token_form: '验证码'
20
+ tiny_passport/reset_password_form: '重置密码'
21
+ attributes:
22
+ tiny_passport/reset_password_token_form:
23
+ login_email_value: '登录邮箱'
24
+
25
+ tiny_passport/confirmation_token_form:
26
+ login_email_value: '登录邮箱'
27
+
28
+ tiny_passport/update_password_form:
29
+ password: '密码'
30
+ current_password: '当前密码'
31
+ password_confirmation: '密码确认'
32
+
33
+ tiny_passport/session_form:
34
+ input_value: '用户名或登录邮箱'
35
+ password: '密码'
36
+ remembered: '记住登录状态'
37
+
38
+ tiny_passport/registration_form:
39
+ login_email_value: '电子邮箱'
40
+ login_name: '用户名'
41
+ password: '密码'
42
+ password_confirmation: '密码确认'
43
+ agreement_terms: '同意我们的协议'
44
+ tiny_captcha: '验证码'
45
+
46
+ tiny_passport/reset_password_form:
47
+ password: '密码'
48
+ password_confirmation: '密码确认'
49
+
50
+
51
+ errors:
52
+ models:
53
+ tiny_passport/registration_form:
54
+ attributes:
55
+ agreement_terms:
56
+ not_agree: '请同意我们的协议'
57
+ login_name:
58
+ invalid: "无效"
59
+ login_email_value:
60
+ invalid: "无效"
61
+ password:
62
+ too_short: "长度不够"
63
+ blank: "不能为空"
64
+ password_confirmation:
65
+ confirmation: "两次输入不一致"
66
+
67
+ tiny_passport/confirmation_token_form:
68
+ attributes:
69
+ login_email_value:
70
+ already_active: '已经激活'
71
+ not_found: '没有找到'
72
+ invalid: '无效'
73
+
74
+ tiny_passport/session_form:
75
+ attributes:
76
+ input_value:
77
+ blank: "不能为空"
78
+ login_email_not_exists: "邮箱不存在"
79
+ login_name_not_exists: "用户名不存在"
80
+ login_email_wrong: "登录邮箱错误"
81
+ login_email_not_active: "登录邮箱没有激活"
82
+ password:
83
+ wrong: "错误"
84
+ blank: "不能为空"
85
+
86
+ tiny_passport/update_password_form:
87
+ attributes:
88
+ current_password:
89
+ not_matached: '不匹配'
90
+ password:
91
+ not_changed: '没有修改'
92
+
93
+ tiny_passport/reset_password_token_form:
94
+ attributes:
95
+ login_email_value:
96
+ not_found: '没有找到'
97
+ not_active: '没有激活'
98
+ invalid: "无效"
99
+ blank: "不能为空"
100
+
101
+ tiny_passport/reset_password_form:
102
+ attributes:
103
+ base:
104
+ invalid: '无效的'
105
+ reset_password_token:
106
+ not_found: '没有找到'
107
+ blank: '不能为空'
108
+ password:
109
+ invalid: '无效'
110
+ blank: '不能为空'
111
+ too_short: '长度不足'
112
+ password_confirmation:
113
+ confirmation: "两次输入不一致"
114
+
115
+ tiny_passport/account_active_form:
116
+ attributes:
117
+ base:
118
+ invalid: '无效的'
119
+ confirmation_token:
120
+ already_active: '已经激活'
121
+ expired: '过期了'
122
+ not_matched: '不匹配'
123
+
data/config/routes.rb CHANGED
@@ -1,2 +1,3 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  TinyPassport::Engine.routes.draw do
2
3
  end
@@ -0,0 +1,23 @@
1
+ # -*- encoding : utf-8 -*-
2
+ class CreateTinyPassportAccounts < ActiveRecord::Migration
3
+ def change
4
+ create_table :tiny_passport_accounts do |t|
5
+ t.string :login_name
6
+ t.integer :avatar_id
7
+ t.string :created_ip, :default => '', :null => false # IP
8
+ t.string :encrypted_password, :default => '', :null => false
9
+ t.string :password_salt, :default => '', :null => false
10
+ t.integer :register_way_value, :default => 0, :null => false
11
+ t.datetime :deleted_at
12
+ t.datetime :last_login_at # 上一次登录时间
13
+ t.integer :login_records_count, :default => 0, :null => false
14
+ t.integer :current_login_failed_count, :default => 0, :null => false
15
+ t.integer :login_failed_count, :default => 0, :null => false
16
+ t.integer :last_login_record_id #上一次登录的记录
17
+
18
+ t.timestamps
19
+ end
20
+
21
+ add_index :tiny_passport_accounts, [:login_name], :unique => true
22
+ end
23
+ end
@@ -0,0 +1,20 @@
1
+ # -*- encoding : utf-8 -*-
2
+ class CreateTinyPassportLoginRecords < ActiveRecord::Migration
3
+ def change
4
+ create_table :tiny_passport_login_records do |t|
5
+ t.integer :account_id
6
+ t.string :ip, :default => '', :null => false
7
+ t.string :last_remembered_ip, :default => '', :null => false
8
+ t.integer :way_value, :default => 0, :null => false
9
+ t.boolean :remembered, :default => false, :null => false
10
+ t.string :encrypted_remember_token, :default => '', :null => false
11
+ t.datetime :remember_expires_at
12
+ t.integer :remembered_count, :default => 0, :null => false
13
+ t.datetime :remember_sign_out_at # 主动退出时间
14
+
15
+ t.timestamps
16
+ end
17
+
18
+ add_index :tiny_passport_login_records, [:account_id]
19
+ end
20
+ end