Как я могу прочитать данные r_basicprofile на рельсы

Как я могу показать данные r_basicprofile из omniauth-linkedin, в моем представлении макета? Я новичок на рельсах, и я пытаюсь показать эти данные в моем приложении, html.erb view.

у меня есть следующие коды

приложение / контроллеры /omniauth_callbacks_controller.rb

здесь я попытался сделать мои данные токена доступными для дальнейшего использования с

access_token = auth["учетные данные"]["токен"]
access_secret = auth ["учетные данные"]["секрет"]

class OmniauthCallbacksController < Devise::OmniauthCallbacksController   

def linkedin

  auth = env["omniauth.auth"]
  @user = User.from_omniauth(request.env["omniauth.auth"])
  if @user.persisted?
    access_token = auth["credentials"]["token"]
    access_secret = auth["credentials"]["secret"]
    flash[:notice] = I18n.t "devise.omniauth_callbacks.success",kind:   @user['provider'].titleize
    sign_in_and_redirect @user, :event => :authentication
  else
    session["devise.linkedin_uid"] = request.env["omniauth.auth"]
    redirect_to new_user_registration_url
  end
 end

end

приложение / модели /user.rb

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable

  devise :database_authenticatable, :registerable,
 :recoverable, :rememberable, :trackable, :validatable,:omniauthable,:omniauth_providers => [:linkedin]

 def self.from_omniauth(auth)
   user = where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
    user.email = auth.info.email
    user.password = Devise.friendly_token[0,20]
    user.name = auth.info.name 
    user.image = auth.info.image  # assuming the user model has a name
    # If you are using confirmable and the provider(s) you use validate emails, 
    # uncomment the line below to skip the confirmation emails.
    # user.skip_confirmation!
    end
  end

end

в config/initializers/devise.rb

require 'omniauth-linkedin'


  Rails.application.config.middleware.use OmniAuth::Builder do
     provider :linkedin,
      "client_id","client_secret",
    :scope => "r_basicprofile r_emailaddress", 
    :fields => ['id', 'email-address', 'first-name', 'last-name','headline', 'location', 'industry', 'picture-urls::(original)', 'public-profile-url','positions']


  end

наконец, у меня есть только мое представление макета, отображающее некоторые данные, но я все еще не могу сделать изображение видимым или, как я делаю здесь, получить только URL, который должен прийти в запросе auth.env, я пытался сохранить в пользовательской модели с user.image = auth.info.image, но я не могу показать в html, когда я попал в консоль user.image равно nil.

Я прочитал, что после того, как я могу получить доступ к токенам из API, я понимаю, что когда функция def self.from_omniauth (auth) в User.rb вызывается из OmniauthCallbacksController, она успешно получает токен, так что как я не удалось отобразить хотя бы user.image = auth.info.image? чего не хватает в моем коде?

кстати, я открыт для перенаправления в другое представление, если это необходимо, просто я не знаю, как хранить эти данные, linkedin говорит это о дополнительных полях:

восстановить основные данные профиля

если я попытаюсь жестко закодировать ссылку в application.html.erb

  • <% = link_to "basic_profile", " https://api.linkedin.com/v1/people/~?format=json "%>
  • это отвечает ничуть

    {
    
        "errorCode": 0,
        "message": "Unknown authentication scheme",
        "requestId": "CA0TD716FJ",
        "status": 401,
        "timestamp": 1490505226812
    
    }
    

    вот мой

    application.html.erb

    <!DOCTYPE html>
    <html>
    <head>
        <title>Oklock</title>
        <%= csrf_meta_tags %>
    
        <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
        <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
    </head>
    
    <body>
        <p class="notice"><%= notice %></p>
        <p class="alert"><%= alert %></p>
        <%= yield %>
    
    
    
        <% if user_signed_in? %>
    
        <ul> 
            <li>Signed in as <%= current_user.name %>. Not you?</li>
            <li> <%= current_user.provider %></li>
            <li> <%= current_user.uid %></li>
            <li> <%= current_user.email %></li>
            <li><%= current_user.image%></li>
            <li><%= link_to "basic_profile", "https://api.linkedin.com/v1/people/~?format=json"%></li>
    
    
        </ul>
        <%= link_to "Sign out", destroy_user_session_path,:method => :delete %>
        <% else %>
        <%= link_to "Sign up", new_user_registration_path %> or
        <%= link_to "Sign in", new_user_session_path %>
        <%= link_to "Sign in with Linkedin",user_linkedin_omniauth_authorize_path %>
            <% end %>
    
    </body>
    </html>
    

    помогите мне люди! если я должен изменить или сделать другой вызов API на link_to, как? Я ищу как весь день, так как я начал утро, и сейчас 02:19 утра, и я не могу сделать это.

    пожалуйста помоги!

    0 ответов

    Другие вопросы по тегам