2015-01-19 9 views
0

На самом деле, я пытаюсь сделать запись Google+ с помощью ROR. Когда я нажал на ссылку для входа, я получил следующую ошибку.Как решить ошибку redirect_uri_mismatch

400. That’s an error. 

Error: redirect_uri_mismatch 

я обеспечиваю мои фрагменты кода в следующих разделах

views\layouts\application.html.erb 

<!DOCTYPE html> 
<html> 
<head> 
    <title>Google</title> 
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> 
    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 
    <%= csrf_meta_tags %> 
</head> 
<body> 
<div> 
    <% if current_user %> 
     Signed in as <strong><%= current_user.name %></strong>! 
     <%= link_to "Sign out", signout_path, id: "sign_out" %> 
    <% else %> 
     <%= link_to "Sign in with Google", "/auth/google_oauth2", id: "sign_in" %> 
    <% end %> 
</div> 
<div> 
    <%= yield %> 
</div> 
</body> 
</html> 

контроллеры \ application_controller.rb

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    helper_method :current_user 

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

контроллеры \ sessions_controller.rb

class SessionsController < ApplicationController 
    def create 
    user = User.from_omniauth(env["omniauth.auth"]) 
    session[:user_id] = user.id 
    redirect_to root_path 
    end 

    def destroy 
    session[:user_id] = nil 
    redirect_to root_path 
    end 
end 

Config \ маршруты .rb

Rails.application.routes.draw do 
    get 'auth/:provider/callback', to: 'sessions#create' 
    get 'auth/failure', to: redirect('/') 
    get 'signout', to: 'sessions#destroy', as: 'signout' 

    resources :sessions, only: [:create, :destroy] 
    resource :home, only: [:show] 

    root to: "home#show" 
end 

конфигурации \ Инициализаторы \ omniauth.rb

OmniAuth.config.logger = Rails.logger 

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :google_oauth2, '641362005580-inubab5v5p5bv0596dfd9c5bh9s0kr87.apps.googleusercontent.com', 'auDnCkSEelcW6Cs7-YE7VqLR', {client_options: {ssl: {ca_file: Rails.root.join("cacert.pem").to_s}}} 
end 

модели/user.rb

class User < ActiveRecord::Base 
    def self.from_omniauth(auth) 
    where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user| 
     user.provider = auth.provider 
     user.uid = auth.uid 
     user.name = auth.info.name 
     user.oauth_token = auth.credentials.token 
     user.oauth_expires_at = Time.at(auth.credentials.expires_at) 
     user.save! 
    end 
    end 
end 

В экране консоли разработчика Google в мой Юрис и REDIRECT Javascript происхождения

REDIRECT URIS:http://localhost:3000/oauth2callback 
JAVASCRIPT ORIGINS :http://localhost:3000 

Я использую рельсы версии-4. 0.2 и ruby ​​version-1.9.3. Пожалуйста, помогите мне решить эту ошибку.

ответ

0

Я думаю, что у вас может быть неправильная ошибка перенаправления на вашем консоли разработчика Google.

Возможно, вы захотите: http://localhost:3000/auth/google_oauth2/callback.

Если вы хотите следовать руководству, которое охватывает этот поток OAuth с помощью Google, check out this one by my colleague Greg Baugues on the Twilio blog.

Смежные вопросы