Rails 使用 Devise 的 Omniauth 的配置方法来登陆 Github 报错,求解

zhbinx · 2013年03月06日 · 最后由 ywjno 回复于 2013年03月06日 · 3904 次阅读

今天想试试 devise wiki 上关于 omniauth 的一些东西 然后仿照wiki, 我做了这些事情 1. gemfile

gem 'omniauth-github'
gem 'omniauth_crowd'

2.user.rb

devise :omniauthable, :omniauth_providers => [:crowd,:github]

3.devise.rb

  require "omniauth_crowd"
  require "omniauth-github"
  config.omniauth :github, "Client ID", "Client Secret"
config.omniauth :crowd, :crowd_server_url => "SERVER ADD", :application_name => "bgg", :application_password => "bgg"

4.db

rails g migration AddColumnsToUsers provider:string uid:string
rake db:migrate

5.html

<%=link_to 'github',user_omniauth_authorize_path(:github)%><br/>
<%=link_to 'crowd',user_omniauth_authorize_path(:crowd)%>

然后使用链接登陆, 跳转到 github 和 crowd 的登陆页面是没问题了,但是我输入正确用户名密码后提交,就报错:

The action 'github' could not be found for Devise::OmniauthCallbacksController

找了下没找到相关资料 有劳大家帮忙,看我少配哪个东西,谢谢大家

你在 github 的该 app 里面设置的 callback 的 url 跟在浏览器中输入的 url 是一样的么?

比如你在 github 的该 app 登录的 callback 的 url 是http://127.0.0.1:3000/auth/github/callback,浏览器的 url 是用127.0.0.1:3000进的才行,localhost:3000貌似不好用

#1 楼 @ywjno 一样的,都是 localhost 我突然发现还要这样写

devise_for :users, :controller => {:omniauth_callbacks => "omniauth_callbacks"}

然后在 controller 下面加一个omniauth_callbacks_controller.rb 然后文件里写什么我继续不知道

# encoding: utf-8

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def github
    @user = User.find_for_github_oauth(request.env["omniauth.auth"], current_user)

    if @user.persisted?
      flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Github"
      sign_in_and_redirect @user, :event => :authentication
    else
      session["devise.github_data"] = request.env["omniauth.auth"]
      redirect_to new_user_registration_url
    end
  end
end

这是我当初练习时候的代码你参考一下吧

。。。。。devise 的 wiki 里应该有的吧,自己去看https://github.com/plataformatec/devise/wiki/OmniAuth%3A-Overview

#3 楼 @ywjno 我还是有问题,请问githubCallback URL是写什么呢? 我写的是http://localhost:3000/users/auth/github/callback

/users/auth/github/callback应该是这个

#3 楼 @ywjno @NonTwitter 额,对了,谢谢你们啊~~~返回 OmniAuth::AuthHash 了

有关授权这块的坑也不少,外加 api 有时候给变了文档还没更新更是会抓虾,多写几次就熟悉了

#8 楼 @ywjno 好的,谢谢提醒 顺便再问下,登陆正确的话他跳转到了 callback 页面,但是登陆错误的话,它就直接回到了 devise 的登陆页面,而且我也不知道他的提示信息是啥,这个是哪配置的呢?

#9 楼 @zhbinx 貌似是跳转到/auth/failure这个 url,不过我还真没出现过登录错误的情况所以我也不太清楚这块

需要 登录 后方可回复, 如果你还没有账号请 注册新账号