1

Rails アプリを作成していますが、既に has_secure_password を使用した基本認証を作成しています。ただし、その上に facebook と twitter の認証を追加したいと考えています。私の認証は次のとおりです。

ユーザー.rb

class User < ActiveRecord::Base
  before_create :create_remember_token

  has_secure_password

  validates :name, presence: true
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[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

セッションコントローラー

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

  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

だから私はこれの上に Omniauth を介して Facebook と Twitter の認証を追加したいのですが、これを行うための最良の戦略が何であるかはわかりません.それは可能ですか、それとも現在の認証方法を完全に変更する必要がありますか?

4

1 に答える 1

1

まず、次のコードを使用して config/initializers に 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
于 2013-10-05T22:20:59.727 に答える