Advertisement
Guest User

Untitled

a guest
Aug 12th, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.58 KB | None | 0 0
  1. class OmniauthCallbacksController < Devise::OmniauthCallbacksController
  2. def linkedin
  3. return redirect_to new_user_session_path unless user.persisted?
  4.  
  5. sign_in user
  6.  
  7. redirect_to root_url
  8. end
  9.  
  10.  
  11. private
  12.  
  13. def response
  14. request.env['omniauth.auth']
  15. end
  16.  
  17. def user
  18. @user ||= Devise::OmniauthCallbacks::Linkedin.(response)
  19. end
  20. end
  21.  
  22. Devise.setup do |config|
  23. ...
  24.  
  25. config.omniauth :linkedin, Rails.application.secrets.linkedin_app, Rails.application.secrets.linkedin_secret
  26.  
  27. ...
  28. end
  29.  
  30. Rails.application.routes.draw do
  31. mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
  32. root 'home#index'
  33.  
  34. devise_for :users, controllers: {
  35. registrations: 'registrations',
  36. omniauth_callbacks: 'omniauth_callbacks'
  37. }
  38.  
  39. devise_scope :user do
  40. patch '/password', to: 'registrations#change_password', as: :change_password
  41. end
  42.  
  43. resources :users
  44. resources :profiles
  45. end
  46.  
  47. class User < ApplicationRecord
  48. include User::DeviseSettings::Callbacks
  49.  
  50. devise :database_authenticatable, :registerable, :recoverable, :rememberable,
  51. :trackable, :validatable, :confirmable, :omniauthable
  52.  
  53. ...
  54. end
  55.  
  56. class User
  57. module DeviseSettings
  58. module Callbacks
  59. extend ActiveSupport::Concern
  60.  
  61. included do
  62. def after_confirmation
  63. self.update(role: User::ADMIN_ROLE) if User.confirmed.exists?
  64. end
  65. end
  66. end
  67. end
  68. end
  69.  
  70. module Devise
  71. module OmniauthCallbacks
  72. class Linkedin < ::ApplicationService::Base
  73. def call
  74. find_user!
  75.  
  76. return user if user.present?
  77.  
  78. create_user!
  79. end
  80.  
  81. private
  82.  
  83. attr_reader :user
  84.  
  85. delegate :info, :extra, :uid, to: :params
  86. delegate :raw_info, to: :extra
  87.  
  88. delegate :email, :first_name, :last_name, :nickname, :image, to: :info
  89.  
  90. def find_user!
  91. @user = User.find_by_uid(params.extra.raw_info.sub)
  92. end
  93.  
  94. def create_user!
  95. @user = UserForm::CreateSocial.new(built_user)
  96.  
  97. user.skip_confirmation!
  98. user.save
  99.  
  100. user.model
  101. end
  102.  
  103. def built_user
  104. @built_user ||= User.new(user_attributes)
  105. end
  106.  
  107. def user_attributes
  108. @user_attributes ||= {
  109. email: email,
  110. password: Devise.friendly_token[0, 20],
  111. provider: :linkedin,
  112. uid: uid,
  113. profile_attributes: {
  114. first_name: first_name,
  115. last_name: last_name,
  116. nickname: nickname,
  117. avatar: image_file
  118. }
  119. }
  120. end
  121.  
  122. def image_file
  123. open(image) if image.present?
  124. end
  125. end
  126. end
  127. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement