devise_russian
Часто используемые наработки по джему Devise для авторизации. Включает решение по авторизации в социальных сетях
Установка
Ставим джемы:
gem "devise"
gem "devise_russian"
А также джемы, через которые мы будем авторизовываться в социальных сетях:
gem "omniauth-facebook"
gem "omniauth-vkontakte"
gem "omniauth-odnoklassniki"
Обратите внимание на метод providers модели Authentication: https://github.com/vav/devise_russian/blob/master/app/models/authentication.rb
В случае необходимости задать свой список провайдеров:
app/models/authentication_decorator.rb:
Authentication.class_eval do
def self.providers
[
['facebook', 'Facebook'],
['vkontakte', 'Vkontakte'],
['odnoklassniki', 'Odnoklassniki'],
['twitter', 'Twitter'],
['github', 'Github'],
['google_oauth2', 'Google']
]
end
end
В config/initializers/omniauth.rb:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, '2222222222222', 'sdsdsd6sd5sd6sdsd65sd6sd56sd6sd534sd54sd',
{:client_options => {:ssl => {:ca_file => "#{Rails.root}/config/ca-bundle.crt"}}}
provider :vkontakte, '222222','sds4dasdah22as22dg',
{:client_options => {:ssl => {:ca_file => "#{Rails.root}/config/ca-bundle.crt"}}}
provider :odnoklassniki, "2222222", "HGF33GH3F3HGF3HGF3SD",
:public_key => "DFKSFDKJHJHFJSDSADSD", :provider_ignores_state => true
...
Миграции:
# Пользователи
create_table :users do |t|
t.datetime :deleted_at # Дата удаления
# Основная информация
t.string :name # Имя
t.string :role # Роль
t.decimal :balance, :precision => 10, :scale => 4, :null => false, :default => 0
## Database authenticatable
t.string :email, :null => false, :default => ""
t.string :encrypted_password, :null => false, :default => ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
t.integer :sign_in_count, :default => 0
t.datetime :current_sign_in_at
t.datetime :last_sign_in_at
t.string :current_sign_in_ip
t.string :last_sign_in_ip
## Confirmable
t.string :confirmation_token
t.datetime :confirmed_at
t.datetime :confirmation_sent_at
t.string :unconfirmed_email # Only if using reconfirmable
## Lockable
# t.integer :failed_attempts, :default => 0 # Only if lock strategy is :failed_attempts
# t.string :unlock_token # Only if unlock strategy is :email or :both
# t.datetime :locked_at
## Token authenticatable
# t.string :authentication_token
t.
end
add_index :users, :email, :unique => true
add_index :users, :reset_password_token, :unique => true
add_index :users, :confirmation_token, :unique => true
# add_index :users, :unlock_token, :unique => true
# add_index :users, :authentication_token, :unique => true
# Авторизации
create_table :authentications do |t|
t.integer :user_id
t.string :provider
t.string :uid
t.string :email
t.string :name
t.
end
add_index :authentications, :user_id
Прописываем роуты:
config/routes.rb:
mount DeviseRussian::Engine => "/auth", :as => "devise_russian"
Подключаем девайс и русский девайс в модели:
app/models/user.rb:
# Devise
devise :database_authenticatable,
:confirmable,
:registerable,
:recoverable,
:rememberable,
:trackable,
:validatable
# Russian Devise
omniauthable
class << self
...
# Вывод списка провайдеров на странице входа
def omniauth_enabled
false
end
...
end
Прописывем название и адрес сайта для подвала писем от Devise:
ru:
devise_russian:
my_authentications: Мои авторизации
authentication_not_found: Авторизация не найдена
mailer:
site_name: Мега-портал
site_url: "http://www.portal.ru"
Ссылки на вход и регистрацию:
<ul>
<li><a href="/auth/login">Вход</a></li>
<li><a href="/auth/register">Регистрация</a></li>
</ul>
Ну и так далее. Настраивайте под себя!