У меня есть приложение rails с авторизацией через devise
и omniauth-vk
. Это код в omniauth_callbacks_controller.rb
Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def vkontakte
binding.pry
@user = User.from_omniauth(request.env["omniauth.auth"])
token = request.env["omniauth.auth"]["credentials"]["token"]
current_user.token = @vk.token
current_user.vk_id = @vk.user_id
current_user.save
@vk = VkontakteApi::Client.new(current_user.token)
if @user.persisted?
sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated
set_flash_message(:notice, :success, :kind => "vkontakte") if is_navigational_format?
else
session["devise.vkontakte_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
if request.env["omniauth.auth"].info.email.blank?
redirect_to "/users/auth/vkontakte?auth_type=rerequest&scope=email"
end
end
end
Я хочу связать текущего аутентифицированного пользователя с его токеном, но не знаю как. Когда я тестирую строку pry
current_user.token = @vk.token
, у меня возникает следующее исключение:
NoMethodError: undefined method `token' for nil:NilClass
from (pry):11:in `vkontakte'