标签: omniauth-facebook

如何摆脱OpenSSL :: SSL :: SSLError

我正在尝试使用OmniAuth对Facebook用户进行身份验证.最初,它工作,但一路上它只是停止工作,并开始给我这个错误信息:

OpenSSL :: SSL :: SSLError SSL_connect返回= 1 errno = 0状态= SSLv3读取服务器证书B:证书验证失败

相同的代码适用于Twitter,我似乎无法理解为什么它不适用于Facebook.我在网上寻求帮助,但我没有成功.

这是我正在建立的网站的链接:http://www.bestizz.com/
这个网址会给你错误信息:http://www.bestizz.com/auth/facebook

facebook ruby-on-rails omniauth omniauth-facebook

31
推荐指数
4
解决办法
5万
查看次数

Rails 4.1.5 omniauth强参数

将Rails 4.1.4升级到4.1.5后,我的facebook omniauth会话出错,从那时起一切正常.当我创建用户会话时,我得到了一个ActiveModel::ForbiddenAttributesError

路线:

  match 'auth/:provider/callback', to: 'sessions#create', as: 'signin', via: :get
Run Code Online (Sandbox Code Playgroud)

Session#创建控制器:

  def create
        user = User.from_omniauth(env["omniauth.auth"])
        session[:user_id] = user.id 
        session[:user_name] = user.name

      redirect_to root_path
  end
Run Code Online (Sandbox Code Playgroud)

和这样的用户模型:

  def self.from_omniauth(auth)
    where(auth.slice(:provider, :uid)).first_or_create.tap do |user|
      user.provider ||= auth.provider 
      user.uid = auth.uid
      user.name = auth.info.name
      user.save
    end
  end
Run Code Online (Sandbox Code Playgroud)

我可以通过添加许可来绕过ActiveModel错误!我的用户模型中的方法是这样的:

where(auth.slice(:provider, :uid).permit!).first_or_create.tap do |user|
Run Code Online (Sandbox Code Playgroud)

但是它覆盖了数据库中的第一个用户... session[:user_id]似乎总是数据库中的第一个用户.

我不知道这是一个强大的参数问题,一个Omniauth问题还是两者兼而有之?

facebook ruby-on-rails strong-parameters omniauth-facebook

19
推荐指数
2
解决办法
6535
查看次数

最新的 omniauth-facebook gem 破坏设计

红宝石 '2.6.3' 宝石 'rails', '~> 6.0.2', '>= 6.0.2.1'

我正在使用最新的 omniauth-facebook 并一起设计 Gemfile: gem 'devise' gem 'omniauth-facebook'

启动服务器时出现此错误:

/versions/2.6.3/lib/ruby/gems/2.6.0/gems/devise-4.7.3/lib/devise/omniauth.rb:12:in `': 您使用的是旧版 OmniAuth,请确保您已安装 1.0.0.pr2 版本或更高版本。(运行时错误)

问题是,如果我尝试使用较旧的 omniauth-facebook 版本,服务器可以正常工作,但 Facebook 身份验证将停止正常工作(例如,尽管包括电子邮件,但仍失败)

范围:'email',info_fields:'email,name'

在设计.rb。)

我尝试了 omniauth-facebook 和 devise 的许多不同版本组合。Facebook 身份验证停止正常工作或服务器出现故障(见上文)。

rubygems ruby-on-rails devise omniauth omniauth-facebook

11
推荐指数
3
解决办法
6142
查看次数

omn​​iauth-facebook cannnot获取电子邮件地址

我创建了新的Rails应用程序并安装了Devise和omniauth-facebook gem.

并将我的Facebook App设置为测试环境.

所以,我通过Facebook登录并注册了我的新Rails应用程序,但request.env不包含电子邮件地址.info.

返回request.env ['omniauth.auth']

{
   "provider" => "facebook",
   "uid" => "xxxxxxxxxxxx",
   "info" => {
         "name" => "xxxxxxx",
        "image" => "http://graph.facebook.com/xxx/picture"
    },
    "credentials" => {
             "token" => "tokenstring",
        "expires_at" => xxxxxxxxx,
           "expires" => true
    },
          "extra" => {
        "raw_info" => {
            "name" => "xxx xxxx",
              "id" => "xxxxxxxxx"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它机架request.env ['omniauth.auth'] ['info'] ['email']

如何通过oauth从facebook获取电子邮件地址?请有人帮帮我.

Rails ver是4.2.3 Ruby ver是2.2.2p95

这是宝石版本

 omniauth (1.2.2)
 omniauth-facebook (2.0.1)
 devise (3.5.1)
Run Code Online (Sandbox Code Playgroud)

配置/初始化/ devise.rb

  config.omniauth :facebook, 'appId', 'appSeacret', scope: 'email,public_profile'
Run Code Online (Sandbox Code Playgroud)

应用程序/控制器/ omniauth_callbacks_controller.rb

  def …
Run Code Online (Sandbox Code Playgroud)

facebook ruby-on-rails devise omniauth omniauth-facebook

9
推荐指数
1
解决办法
3501
查看次数

omn​​iauth用于rails和ios身份验证

我有一个rails应用程序来处理iOS客户端的api.我使用devise,omniauth-facebook for rails.对于iOS客户端,我使用帐户和社交框架进行facebook身份验证.我已经抓住oauth令牌并通过omniauth回调将其传递给rails进行身份验证,但我收到了此错误.有人可以指导我做错了什么吗?下面是我得到的日志.

Started POST "/users/auth/facebook/callback" for ::1 at 2015-01-12 10:59:22 +0800 I, [2015-01-12T10:59:22.928323 #99294] INFO -- omniauth: (facebook) Callback phase initiated. E, [2015-01-12T10:59:22.929737 #99294] ERROR -- omniauth: (facebook) Authentication failure! no_authorization_code: OmniAuth::Strategies::Facebook::NoAuthorizationCodeError, must pass either a code (via URL or by an fbsr_XXX signed request cookie) Processing by Users::OmniauthCallbacksController#failure as / Parameters: {"access_token"=>"tokenFromACFBiOS"} Redirected to localhost:3000/users/sign_in Completed 302 Found in 4ms (ActiveRecord: 0.0ms)
Run Code Online (Sandbox Code Playgroud)

这是我的iOS和后端代码的要点.https://gist.github.com/chocnut/ae6f415accd95c8ef415

facebook ruby-on-rails devise ios omniauth-facebook

8
推荐指数
1
解决办法
1509
查看次数

如何在使用devise和omniauth-facebook时指定facebook图形API版本

我在rails 4应用程序中使用了devise和omniauth-facebook身份验证.

Facebook已经转向v2.x图形API.(api迁移的截止日期是2015年4月30日).

在身份验证期间,Facebook的登录对话框显示以下消息

"You must upgrade this app to Graph API v2.x
v1.0 will be deprecated on April 30, 2015
Learn how to upgrade"
Run Code Online (Sandbox Code Playgroud)

我想这是因为omniauth-facebook/devise现在使用facebook图api v1.x.

如何将其配置为指向v2.x?

facebook ruby-on-rails devise facebook-graph-api omniauth-facebook

7
推荐指数
1
解决办法
2346
查看次数

Ruby on Rails Omniauth facebook不会返回电子邮件

我一直在努力设置我的Omniauth for facebook我不知道我做错了什么.

我无法收到用户的电子邮件.返回的哈希只包含"name"和"uid",甚至不包含"first_name"和"last_name"

devise.rb:

  config.omniauth :facebook, "KEY", "SECRET"
Run Code Online (Sandbox Code Playgroud)

omn​​iauth_callbacks_controller.rb:

class OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def facebook
    logger.info request.env["omniauth.auth"]
    @user = User.from_omniauth(request.env["omniauth.auth"])
    sign_in_and_redirect @user
  end
end 
Run Code Online (Sandbox Code Playgroud)

user.rb:

class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
       :recoverable, :rememberable, :trackable, :validatable,
       :omniauthable, :omniauth_providers => [:facebook]

has_many :authentications

def self.from_omniauth(auth)
  logger.info auth
  user = where(email: auth.info.email).first
  if(user != nil)
    user.authentications.where(provider: auth.provider, uid: auth.uid).first_or_create do |l|
      user.authentications.create!(user_id: user.id,
                                  provider: auth.provider,
                                  uid: auth.uid) …
Run Code Online (Sandbox Code Playgroud)

facebook ruby-on-rails devise omniauth-facebook

7
推荐指数
3
解决办法
4923
查看次数

从facebook omniauth获取first_name和last_name字段

我现在正在我的应用程序中实现omniauth功能.一切正常,除了我不能从Facebook获得名字和姓氏.这是我的型号代码.

    def self.from_omniauth(auth)
    user = User.where(email: auth.info.email).first
    if user
      return user
    else
      where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
        user.provider = auth.provider
        user.uid = auth.uid
        user.first_name = auth.info.first_name
        user.last_name = auth.info.last_name
        user.email = auth.info.email
        user.image = auth.info.image
        user.password = Devise.friendly_token[0,20]
      end
    end
Run Code Online (Sandbox Code Playgroud)

我已经为设计正确设置了强大的参数,因为我现在使用它进行默认身份验证并且工作正常.是否还需要来自facebook的名字和姓氏的其他权限?

facebook ruby-on-rails devise omniauth omniauth-facebook

7
推荐指数
1
解决办法
3807
查看次数

Devise/OmniAuth覆盖默认的回调网址

我在Rails 4应用程序中使用Devise 3.5和Omniauth.我创建了与Facebook的集成,允许用户将他们的Facebook帐户连接到我的应用程序.目前,当用户点击连接按钮时,它们会被发送到/user/auth/facebook然后重定向到Omniauth生成的回调网址:/user/auth/facebook/callback.我想要做的是在某些情况下手动覆盖此回调网址 - 这意味着我不想在初始化程序中覆盖它 - 使用完全限定的URL.例如,如果用户开始使用,http://www.example.com/我可能希望覆盖默认的回调网址http://app.example.com/user/auth/facebook/callback.

我的应用程序具有动态子域,用户将(几乎)始终在子域上开始身份验证过程.不幸的是,Facebook似乎不支持oauth重定向网址中的通配符,这就是为什么我希望能够检测用户是否在子域中并将回调网址调整为我已在我的Facebook应用上列入白名单的内容以便授权过程成功.

根据我的阅读,url helper omniauth_authorize_path接受其他参数作为参数传递.我已经尝试过这样的自定义回调路径,但没有成功:

user_omniauth_authorize_path(:facebook, callback_path: @custom_callback)
Run Code Online (Sandbox Code Playgroud)

我也试过换callback_pathredirect_urlredirect_uri,但似乎没什么用.当我看到系统产生的链接,它确实有回调作为URL参数,但是当我点击链接,我重定向回默认的回调URL,而不是自定义回调URL.

facebook ruby-on-rails devise omniauth omniauth-facebook

7
推荐指数
1
解决办法
2314
查看次数

Rails 4 + omniauth facebook - 检测到csrf

我正在使用我的RoR4应用程序,以便用户通过现有facebook帐户登录.我注册了一个Facebook应用程序(一个实时和测试版本)并存储其api和秘密development.rb.我使用omniauth-facebook和设计宝石并遇到了" Csrf detected"问题.

我的应用程序代码受到以下博客文章的启发:http: //sourcey.com/rails-4-omniauth-using-devise-with-twitter-facebook-and-linkedin/

我确实看到了2年前发布的stackoverflow帖子的解决方案(Rails + omniauth + facebook - 检测到csrf) - 但最新的omniauth-facebook版本比发布的版本大得多.无论哪种方式,我试图回到omniauth-facebook gem到版本1.4.1,我仍然遇到了这个问题.

宝石

oauth2 (1.0.0)
omniauth (1.2.2)
omniauth-facebook (2.0.1)
omniauth-oauth2 (1.3.1)
Run Code Online (Sandbox Code Playgroud)

想法?

错误日志

(facebook) Callback phase initiated.
(facebook) Callback phase initiated.
(facebook) Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected
Run Code Online (Sandbox Code Playgroud)

facebook devise omniauth ruby-on-rails-4 omniauth-facebook

6
推荐指数
1
解决办法
1416
查看次数