@maxprof
Студент

Почему не работает выход с сайта (OmniAuth)?

Здравствуйте, делаю регистрацию на сайте по уроку. Вход на сайт работает, а вот выход нет. Подскажите пожалуйста что исправить. Пункты меню не меняются, и пишется, что пользователь ещё на сайте.
Application.html.erb
<ul class="nav navbar-nav navbar-right">
    		<% if current_user %>
    			<li>Signed in as: <%= current_user.name %></li>
    			<li><%= link_to "Sign out", 'sign_out', method: :delete %></li>
    		<% else %>
    			<li><%= link_to "auth/facebook" do %>Facebook<% end %></li>
    			<li><%= link_to "auth/vkontakte" do %>VK<% end %>
    		<% end %>
      </ul>

home_controller.rb
before_action :set_auth
  
  def index
  end

  def profile
  end

  private 

  def set_auth
  	@auth = session[:omniauth] if session[:omniauth]
  end

Application_controller.rb
protect_from_forgery with: :exception

  private
 
  def current_user
     @current_user ||= User.find_by(uid: session[:user_id]) if session[:user_id]
  end

  helper_method :current_user

User.rb(модель)
def self.sign_in_from_omniauth(auth)
   	 find_by(provider: auth['provider'], uid: auth['uid']) || create_user_from_omniauth(auth)
	end

    def self.create_with_omniauth(auth)
      create! do |user|
        user.provider = auth["provider"]
        user.uid = auth["uid"]
        user.name = auth["info"]["name"]
      end
    end

Session_controller.rb
def create
		auth = request.env["omniauth.auth"]
		session[:omniauth] = auth.except('extra')
		user = User.sign_in_from_omniauth(auth)
		session[:uid] = user.uid
		redirect_to root_url, notice: "SIGNED IN"
	end

	def destroy
		session[:uid] = nil
		session[:omniauth] = nil
		redirect_to root_url, notice: "SIGNED OUT"
	end

route.rb
Rails.application.routes.draw do

  root to: "home#index"
  get "/auth/:provider/callback" => "sessions#create"
  # get "/sign_out" => "sessions#destroy", :as => :sign_out
  delete 'sign_out', to: 'sessions#destroy'

end
  • Вопрос задан
  • 157 просмотров
Пригласить эксперта
Ответы на вопрос 1
application.html.haml
%a{:href=>destroy_user_session_path} Выйти
config/initializers/devise.rb
# The default HTTP method used to sign out a resource. Default is :delete.
  config.sign_out_via = :get

в routes.rb по этому вопросу ничего не нужно, у меня вот что:
devise_for :users, :controllers => { :omniauth_callbacks => 'users/omniauth_callbacks', 
		:registrations => 'users/registrations', 
		:confirmations => 'users/confirmations',
		:sessions=> 'users/sessions' },
		:path => '',
		:path_names => { :sign_in => 'вход', :sign_out => 'выход', :sign_up => 'регистрация'}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы