Я использую Omniauth с Devise в моем приложении rails. Мне удалось правильно войти в аккаунт, когда они используют omniauth (в данном случае, facebook). Когда пользователь пытается войти в систему, используя свой адрес электронной почты и пароль вместо omniauth, приложение все равно будет регистрировать пользователя, но не сохраняет сеанс. Таким образом, кнопка выключения не отображается, и пользователь не может делать то, что он/она предполагает делать.Разработка не обязательной сессии (Omniauth) в Rails 4
Это мой маршрут для пользователя:
devise_for :users, path_names: {sign_in: "login", sign_out: "logout"}, controllers: {registrations: 'registrations', omniauth_callbacks: "omniauth_callbacks"}, :skip => [:sessions]
as :user do
get 'sign-in' => 'devise/sessions#new', :as => :new_user_session
post 'sign-in' => 'devise/sessions#create', :as => :user_session
get '/users/sign_out' => 'devise/sessions#destroy'
resources :users_admin, :controller => 'users'
end
Это мой OmniauthCallbacksController:
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
def all
user = User.from_omniauth(request.env["omniauth.auth"])
if user.persisted?
session[:user_id] = user.id
sign_in_and_redirect user, notice: "Signed in!"
else
session["devise.user_attributes"] = user.attributes
redirect_to new_user_registration_url
end
end
alias_method :facebook, :all
end
Это мой SessionController:
class SessionsController < ApplicationController
def create
user = User.from_omniauth(env["omniauth.auth"])
session[:user_id] = user.id
redirect_to root_url
end
def destroy
session[:user_id] = nil
redirect_to root_url
end
end
И учебник, который я следующее здесь: https://www.youtube.com/watch?v=X6tKAUOMzCs
Пожалуйста, помогите .. спасибо!