标签: omniauth

Rails 3路由约束和正则表达式

我希望匹配state/city路径中的模式,除非状态变量等于"auth"

match '/:state/:city' => 'cities#index', :as => :state_cities, :constraints => {:state => /(?!auth)/ }
Run Code Online (Sandbox Code Playgroud)

例如,mydomain.com/fl/miami很好.mydomain.com/auth/twitter不好.

我正在使用omniauth,它要求你/auth/twitter进行身份验证,但是当我输入时无处可寻rake routes.

regex routing ruby-on-rails omniauth

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

Omniauth会话NoMethodError

我正在开发一个rails应用程序,允许用户使用omniauth通过facebook/twitter/linkedin登录.到目前为止,用户可以使用身份验证进行注册和创建帐户,但是他们必须通过验证,然后转发到注册页面,在那里他们必须输入有效的名称,用户名和电子邮件.如果可能的话,我希望使用request.env ["omniauth.auth"]哈希填写这些字段.

这是我的代码:

authentications_controller.rb

user = User.new 
user.apply_omniauth(omniauth)

if user.save
  flash[:notice] = "Signed in successfully."
  sign_in_and_redirect(:user, user)
else 
  session[:omniauth] = omniauth.except('extra')
  redirect_to new_user_registration_url
end
Run Code Online (Sandbox Code Playgroud)

registrations_controller.rb:

def build_resource(*args)
  super
  if session[:omniauth]
    @user.apply_omniauth(session[:omniauth])
    @user.valid?
  end
 end
Run Code Online (Sandbox Code Playgroud)

user.rb:

def apply_omniauth(omniauth)
  self.name = omniauth['user_info']['name'] if name.blank?
  self.email = omniauth['user_info']['email'] if email.blank?
  authentications.build(:provider => omniauth['provider'], :uid => omniauth['uid'])
end
Run Code Online (Sandbox Code Playgroud)

这条线:

self.email = omniauth['user_info']['email'] if email.blank?
Run Code Online (Sandbox Code Playgroud)

导致此NoMethodError:

undefined method `[]' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

会话[:omniauth]正在apply_omniauth方法中从注册控制器传递到omniauth.如何在此会话中访问姓名和电子邮件?

谢谢

hash session ruby-on-rails omniauth

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

Sinatra + omniauth + Android,寻求建议

我正在开发一个Sinatra应用程序,我想使用OmniAuth.到目前为止,我对Web应用程序有类似的东西:

http://codebiff.com/omniauth-with-sinatra

我希望网络应用程序可以通过Android手机使用,它将使用API​​,通过令牌进行身份验证.这里似乎很好地介绍了API的开发:

Sinatra - API - 身份验证

目前尚不清楚的是我可能会安排登录程序.据推测,它将沿着这些方向:

  1. 用户通过Android设备上的应用内按钮选择要使用的服务,例如Twitter,FaceBook&c.
  2. Android应用程序打开webview以登录Web应用程序.
  3. 以某种方式创建令牌,将其存储在Web应用程序的数据库中,并返回到Android应用程序,以便可以将其存储并用于后续API请求.

关于如何管理第3点,我不是很清楚 - 有没有人有任何建议?

android sinatra omniauth

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

omn​​iauth with rails:获取facebook用户的信息

在我的身份验证过程的回调中:
auth_hash = request.env['omniauth.auth']

然后,我正在提取用户ID,但是有可能同时获取用户的姓名和电子邮件地址吗?

ruby facebook ruby-on-rails omniauth

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

Omniauth Nginx Unicorn回调错误的主机URL

我已经将Rails应用程序部署到VPS服务器,并且我正在使用Nginx/Unicorn组合,一切正常,除了由于某种原因超出我的理解,Omniauth回调重定向错误,

即.

http://unicorn/users/auth/linkedin/callback?oauth_token=95218ed3-b426-45ab-b022-693d2a2447cb&oauth_verifier=25955
Run Code Online (Sandbox Code Playgroud)

它应该是:

http://my-real-domain.com/users/auth/linkedin/callback?oauth_token=95218ed3-b426-45ab-b022-693d2a2447cb&oauth_verifier=25955
Run Code Online (Sandbox Code Playgroud)

怎么了?为什么回调使用nginx中定义的上游名称?

upstream unicorn {
  server unix:/tmp/unicorn.todo.sock fail_timeout=0;
}

server {
  listen 80;
  listen [::]:80 ipv6only=on default_server;

  root /home/deploy/work/project/current/public;
  index index.html index.htm;

  server_name my-real-domain.com;

  try_files $uri/index.html $uri @unicorn;

  location @unicorn {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Client-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_pass http://unicorn;
  }

  error_page 500 502 503 504 /500.html;

  location ~ ^/assets/ {
    expires 1y;
    add_header Cache-Control public;

    add_header ETag "";
    break;
  }
}
Run Code Online (Sandbox Code Playgroud)

请你帮助我好吗?我需要知道如何克服这种错误的重定向.

提前致谢!

nginx unicorn omniauth ruby-on-rails-3.2

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

在用户模型上存储access_token和refresh_token并再次使用它们会导致错误

我在我的Rails应用程序中使用omn​​iauth-coinbasecoinbase-ruby.

在我的应用程序中,用户通过Coinbase登录,生成一个code然后我转为a access_token和a refresh_token.

然后,我在变量下创建一个新的OAuth客户端coinbase,它具有完整的功能.

user_credentials = {
    :access_token => access_token,
    :refresh_token => refresh_token,
    :expires_at => Time.now + 1.day
}
coinbase = Coinbase::OAuthClient.new(ENV['COINBASE_CLIENT_ID'], ENV['COINBASE_CLIENT_SECRET'], user_credentials)
Run Code Online (Sandbox Code Playgroud)

这是问题开始的地方:

我存储access_tokenrefresh_token对用户模型作为字符串,以便当用户回来,我既可以使用两个活动令牌或使用refresh_token产生两个新的标记,如节中提到这里的"访问令牌和刷新令牌"

Coinbase公开了一个refresh!我可以在我的coinbaseOAuth实例上调用的方法,它应该给我两个新的标记.

refresh!正常工作后,我产生一个新的OAuth客户端,但不是当我拉从数据库中现有的标记(有效或无效)关闭用户模式,创建一个user_credentials哈希如上所述,实例化一个新的OAuth客户端,然后调用refresh!上.

据我所知,我的研究access_token到期了.我使用refresh_token随时随地获得新的access_token和新的refresh_token.所以在我看来,我应该能够实例化一个新的OAuth客户端,给它两个键并运行一个refresh!让我恢复正常工作并能够对Coinbase API进行有效调用.

任何人都可以帮助我解决我可能做错的事情吗?谢谢!

我得到的错误refresh!如下:

OAuth2::Error: invalid_request: The request …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails oauth-2.0 omniauth coinbase-api

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

ForbiddenAttributesError,仅在测试中,在次要版本升级后

我正在尝试从Rails 4.1.11升级到4.1.16.升级后,我的几个SessionsController规范都失败了.但是当我尝试登录开发环境时,一切似乎都运行正常.

我有以下代码:

# sessions_controller.rb
def create
  @identity = Identity.find_or_create(auth)
  ...
end

protected

def auth
  request.env["omniauth.auth"]
end

# identity.rb
class Identity < ActiveRecord::Base
  ...
  def self.find_or_create(auth)
    where(auth.slice(:uid, :provider)).first_or_create
  end
end
Run Code Online (Sandbox Code Playgroud)

在我的规范中,我使用fixture spec_helper.rb来提供OmniAuth哈希:

# spec_helper.rb
OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new({
  :provider => 'facebook',
  :uid => '1234567',
  :info => {
    :email => 'joe@bloggs.com',
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用OmniAuth属性来查找用户的身份时,我得到一个ForbiddenAttributesError:

1) SessionsController GET :create not yet signed in sets the user ID in the session hash
   Failure/Error: get :create
   ActiveModel::ForbiddenAttributesError:
     ActiveModel::ForbiddenAttributesError
   # /Users/pat/.rvm/gems/ruby-2.1.2/gems/activemodel-4.1.6/lib/active_model/forbidden_attributes_protection.rb:21:in `sanitize_for_mass_assignment' …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails omniauth strong-parameters

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

设计Omniauth-facebook旁路Rails验证

我刚刚按照这篇文章在我的Rails 4应用程序中实现omniauth。

在我的用户模型中,我有两种类型的用户,即ADMIN(由表单创建)和MEMBER(由omniauth创建)。我需要绕过将由omniauth创建的MEMBER用户的所有验证。

我知道可以通过传递此选项来完成:

save(validate: false)
Run Code Online (Sandbox Code Playgroud)

但是,采用了first_or_create方法:

  def self.from_omniauth(auth)
    # where(auth.slice(:provider, :uid)).first_or_create do |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   # assuming the user model has a name
      user.image = auth.info.image # assuming the user model has an image
    end
  end
Run Code Online (Sandbox Code Playgroud)

因此,我的问题是:在这种omniauth情况下,如何绕过所有验证?

请指教。

validation ruby-on-rails devise omniauth ruby-on-rails-4

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

Rails- Ruby实例变量

所以我使用omniauth-facebook使用Facebook创建登录.
这是我的sessions_controller.rb

class SessionsController < ApplicationController

  def create
    user = User.from_omniauth(env["omniauth.auth"])
    session[:user_id] = user.id
    redirect_to "/sessions/menu"
  end

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

  def new
  end

  def menu
      puts user.name
  end

end
Run Code Online (Sandbox Code Playgroud)

不幸的是我不知道如何在菜单操作中访问用户变量.你们怎么建议我这样做?

更新

class SessionsController < ApplicationController

  def create
    @user = User.from_omniauth(env["omniauth.auth"])
    session[:user_id] = @user.id
    redirect_to "/sessions/menu"
  end

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

  def new
  end

  def menu
      puts @user
  end

end
Run Code Online (Sandbox Code Playgroud)

即使我像这样更新它,它也行不通

ruby variables facebook ruby-on-rails omniauth

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

omn​​iauth.auth for Facebook没有返回完整哈希,也无法成功登录Facebook

我正在研究来自http://www.theodinproject.com/ruby-on-rails/final-project的facebook克隆项目.

我被omniauth-facebook部分困住了,我无法成功登录facebook.我认为问题可能是由于request.env ["omniauth.auth"].当我尝试提出request.env ["omniauth.auth"].to_yaml时.我得到以下不完整的哈希.它缺少很多信息,例如first_name,last_name,gender等.

--- !ruby/hash:OmniAuth::AuthHash
provider: facebook
uid: &#39;10206926404981253&#39;
info: !ruby/hash:OmniAuth::AuthHash::InfoHash
  name: Thomas Pan
  image: http://graph.facebook.com/10206926404981253/picture
credentials: !ruby/hash:OmniAuth::AuthHash
  token: <token>
  expires_at: 1442277104
  expires: true
extra: !ruby/hash:OmniAuth::AuthHash
  raw_info: !ruby/hash:OmniAuth::AuthHash
    name: Thomas Pan
    id: <id>
Run Code Online (Sandbox Code Playgroud)

**用<>替换了一些信息以确保安全性.

我也在使用它和设计.

其他所有东西似乎都设置正确,因为我按照这里的说明进行设计和omniauth-facebook.https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

user.rb

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

def self.from_omniauth(auth)
  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.first_name = auth.info.first_name
    user.last_name = auth.info.last_name
    user.gender = auth.extra.raw.gender
  end  
end  
Run Code Online (Sandbox Code Playgroud)

devise.rb

config.omniauth :facebook, …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails devise omniauth omniauth-facebook

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