2013-10-05 4 views
1

Я создаю приложение rails, и я уже создал базовую аутентификацию с has_secure_password. Однако я хотел бы добавить аутентификацию facebook и twitter поверх этого. Вот моя аутентификацияЧто такое хорошая стратегия для добавления метода Omniauth и существующего метода проверки подлинности с помощью Rails 4

User.rb

class User < ActiveRecord::Base 
    before_create :create_remember_token 

    has_secure_password 

    validates :name, presence: true 
    VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
    validates :email, presence: true, uniqueness: true, format: {with: VALID_EMAIL_REGEX } 
    validates :last_name, presence: true 

    def User.new_remember_token 
    SecureRandom.urlsafe_base64 
    end 

    def User.encrypt(token) 
    Digest::SHA1.hexdigest(token.to_s) 
    end 

    private 

    def create_remember_token 
    self.remember_token = User.encrypt(User.new_remember_token) 
    end 
end 

SessionsController

class SessionsController < ApplicationController 
    def new 
    end 

    def create 
    user = User.find_by(email: params[:session][:email]) 
    if user && user.authenticate(params[:session][:password]) 
     sign_in user 
     redirect_to users_path(user), success: 'Başarılı bir şekilde giriş yapıldı!' 
    else 
     redirect_to root_path, danger: 'Giriş sırasında sorun oluştu lütfen bilgilerin doğruluğunu kontrol et' 
    end 
    end 

    def destroy 
    sign_out 
    redirect_to root_path, success: 'Başarılı bir şekilde çıkış yapıldı.' 
    end 
end 

SessionsHelper

модуль SessionsHelper

def sign_in(user) 
    remember_token = User.new_remember_token 
    if params[:remember_me] 
     cookies.permanent[:remember_token] = remember_token 
    else 
     cookies[:remember_token] = remember_token 
    end 
    user.update_attribute(:remember_token, User.encrypt(remember_token)) 
    self.current_user = user 
    end 

    def current_user=(user) 
    @current_user = user 
    end 

    def current_user 
    remember_token = User.encrypt(cookies[:remember_token]) 
    @current_user ||= User.find_by(remember_token: remember_token) 
    end 

    def signed_in? 
    !current_user.nil? 
    end 

    def sign_out 
    self.current_user = nil 
    cookies.delete(:remember_token) 
    end 
end 

Поэтому я хочу, чтобы добавить проверку подлинности Facebook и Twitter через OmniAuth на вершине этого, но я не уверен, что лучшая стратегия сделать this.Is это возможно, или я должен полностью изменить способ аутентификации прямо сейчас?

+0

Почему не ты использовать Devise? Тогда вы можете реализовать аутентификацию oauth. –

ответ

1

Сначала создайте omniauth.rb инициализатору в конфигурации/Инициализаторы со следующим кодом:

Rails.application.config.middleware.use OmniAuth::Builder do 

provider :facebook, "key", "secret" 
provider :twitter, "key", "secret" 

end 

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE 

Это, как я обрабатывать контроллер логинов, очень простой:

class LoginsController < ApplicationController 

def create 

    data = request.env['omniauth.auth'] 

    session[:user_name] = data["info"]["name"] 
    session[:user_image] = data["info"]["image"] 

    redirect_to root_path 
end 

def destroy 
    reset_session 
    redirect_to root_path 
end 

end 
+0

был ли это полезным? если бы вы не нашли другого решения? –

Смежные вопросы