标签: devise

如何在rails 3中将openId与devise集成

我是rails的新手,只需要一个简单的设计工作.我正在寻找实现仍然使用核心设计功能集但仍允许通过openid提供程序登录而不是"使用电子邮件或用户名注册"的内容

我如何使用最新设计的gem和rails 3开始使用它?

openid ruby-on-rails devise

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

将Devise与Mongoid集成

我正在开发Ruby on Rails 3应用程序,这是我第一次使用MongoDB.

我一直在思考这个问题几天,我找不到一个好的解决方案.我想讨论两个问题.

  1. 该模型
  2. 如何将其与Devise集成

该申请是一名学校课程经理.它管理着许多学校,其中包含许多学生,课程,教授和任务.

一所学校的结构 - 有很多 - 是:

  • 学校

    • 导向器
    • 学生们
    • 教授
    • 课程
    • 任务
  • 主任是学校的管理员.他是唯一一个可以创建教授,学生和课程的人.

  • 正好有一位导演.
  • 可以有(0 - 多)课程.
  • 可以有(0-多名)学生
  • 可以有(0-多名)教授
  • 学生可能在(0 - 多)课程.
  • 教授可能在(0 - 多)课程.
  • 对于每门课程,可以有(0多个)与(0-多)学生相关的任务.是的,教授可以向特定学生发送特定任务.

关于如何使用Mongoid在MongoDB上构建这个模型集合,我有几天了,我找到了一个可能的解决方案.然而,我来自一个关系数据库世界,也许这是一个糟糕的解决方案,我滥用'嵌入':)

  • 收藏学校
    • 学校1
      • 嵌入导演
      • 嵌入用户
      • 嵌入课程
      • 嵌入任务
    • 学校2
      • 嵌入导演
      • 嵌入用户
      • 嵌入课程
      • 嵌入任务

楷模:

class User
   include Mongoid::Document

   field :first_name
   field :last_name
   field :email

   embedded_in :school, :inverse_of => :director
   embedded_in :school, :inverse_of => :students
   embedded_in :school, :inverse_of => :professors
end                                                 


class School
   include Mongoid::Document          

   field :name
   key :name …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails mongodb devise mongoid

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

如何仅在Devise中为用户添加电子邮件

我希望我的用户能够通过仅提供电子邮件地址来"订阅",而不必强迫他们使用密码注册,除非他们愿意.

我可以添加我自己的验证设置以允许这个但我怀疑如果我开始添加没有密码的用户或用我自己的"未注册"字段标记它们,它将干扰Devise其余部分的工作方式.

目前最简单的解决方案似乎是将这些用户放在一个不同的表中,但它有一点点气味.有任何想法吗?

ruby-on-rails subscribe devise

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

在Rails 3应用程序中使用带有Devise和OmniAuth的Koala获取SSL错误

我正在使用Devise/OmniAuth和Koala构建一个Rails 3应用程序,我收到以下SSL错误:

OpenSSL::SSL::SSLError in Users/omniauth callbacksController#facebook
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
Run Code Online (Sandbox Code Playgroud)

导致此错误的代码是:

@graph = Koala::Facebook::GraphAPI.new(@token)
@friends = @graph.get_connections("me", "friends")
Run Code Online (Sandbox Code Playgroud)

我正在使用Devise与OmniAuth进行身份验证,这是有效的.然后,我将获取返回的facebook令牌,并尝试将其与Koala一起使用,如上所示.这就是造成这个错误的原因.

值得注意的是,我最初收到了与Devise&OmniAuth相同的错误.有一些关于此错误的主题,我可以通过设置我的config/initialisers/devise.rb来解决它,

config.omniauth :facebook, APPID, APPKEY, {:client_options => {:ssl => {:ca_file =>  "/opt/local/share/curl/curl-ca-bundle.crt"}}} 
Run Code Online (Sandbox Code Playgroud)

我猜我需要为Koala提供类似的配置,以便它知道在哪里检索本地ca_file.我在文档中找不到任何关于如何这样做的说明.有关如何执行此操作的任何想法,或一般如何避免错误?

我的开发环境是OSX.

facebook devise omniauth ruby-on-rails-3 koala

6
推荐指数
2
解决办法
1940
查看次数

使用omniauth到facebook连接具有不同权限的现有用户

我正在使用devise/omniauth来进行facebook身份验证并且效果很好.但是,我想添加一个流程,其中现有(非Facebook)用户有能力将他的帐户与Facebook连接.这将需要不同的Facebook权限.所以我似乎找不到两件事

  1. 如何使用devise/omniauth请求facebook连接而无需注销当前用户
  2. 请求来自用户的不同扩展权限(不同于设计配置文件中指定的权限)

有任何想法吗?谢谢

facebook devise omniauth

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

config.authentication_keys 和 config.request_keys 在设计中的区别

在 devise.rb 中,这两个配置的描述让我感到困惑:

# 配置认证用户时使用哪些密钥。默认值只是 :email。您可以将其配置为使用 [:username, :subdomain],因此要对用户进行身份验证,这两个参数都是必需的。请记住,这些参数仅在身份验证时使用,而不是在从会话中检索时使用。如果您需要权限,您应该在 before 过滤器中实现它。您还可以提供一个哈希值,其中该值是一个布尔值,用于确定在该值不存在时是否应中止身份验证。

# config.authentication_keys = [ :email ]
Run Code Online (Sandbox Code Playgroud)

# 配置用于认证的请求对象的参数。给出的每个条目都应该是一个请求方法,它将自动传递给 find_for_authentication 方法并在您的模型查找中考虑。例如,如果您将 :request_keys 设置为 [:subdomain],则 :subdomain 将用于身份验证。为 authentication_keys 提到的相同注意事项也适用于 request_keys。

# config.request_keys = []
Run Code Online (Sandbox Code Playgroud)

不知道它们之间究竟有什么区别以及何时使用什么,谁能给我帮助?

ruby authentication ruby-on-rails devise

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

在 Devise 注册时提交“不允许的参数:电子邮件”

我有一个简单的 Ruby on Rails 应用程序,使用 Devise 进行身份验证。我想让用户使用用户名而不是电子邮件登录,并尝试按照此处所述实现这一点: 设计使用用户名而不是电子邮件进行身份验证

扭曲的是我仍然希望每个用户都有一个电子邮件地址,并且在注册时需要一个。因此,我在注册表单上留下了“电子邮件”字段。

问题是,当我使用有效的电子邮件地址(或电子邮件的任何其他值)填写注册表单时,Devise 会出现错误:“电子邮件不能为空”。

为什么电子邮件被视为空白,我该如何解决?

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation, :remember_me) }
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:username, :password, :remember_me) }
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password) }
  end
end
Run Code Online (Sandbox Code Playgroud)

用户模型

class User < ActiveRecord::Base
  # Include default devise …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails devise ruby-on-rails-4

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

生产中使用Rails 5 App的Elastic Beanstalk Nginx上的502错误网关(头太大)

我正在使用网守,并在Rails 5应用程序中设计了自己的OAuth提供程序以用于Amazon Alexa帐户链接。如果用户触发了OAuth流程并且已经登录到我的网站,则该流程可以正常工作。但是,如果用户未登录,则需要先登录,然后再开始流程。设计登录后,不会将用户重定向到OAuth流。现在,我已经添加了登录后重定向回OAuth流程的功能,并且在开发模式下(使用ngrok)可以正常工作,但是在生产环境中,登录后出现502错误,我无法弄清楚问题出在哪里。

这是access.log中的条目:

2017/05/03 22:54:04 [error] 2866#0: *185513 upstream sent too big header while reading response header from upstream, client: 172.31.23.232, server: _, request: "GET /oauth/authorize?client_id=08e9435534209c8ee4289ea2bec61a811645b254b060909d142ea3f1f5141600&response_type=token&state=eyJpbml0VmVjdG9yIjoiaXRLcmVuWlppWENBcWhad2VUYW0zZz09IiwicGF5bG9hZCI6IjJOeGU3Rks1gFg2cmJWL2lTM3ZpVXFydTVIdFpiOHM1bGVNbUDwUXX3M2QkpOU0tKNFVEaWdIdkZnSTBNNjBzK1U5ZXppUmJTYWdtVFpGeWJIdUJpKzFtaU1sTUpLckZ5cDAxdzVmY3BtYlBPQnZvL3ZMeWpPVTNHK3pWNk5IRDU4YlRDa1Nvb0xLNGVQSVp4bjljSlBuT3c0QXl0NlBSdnpjDDpraDhFTUc1TFF3WGNPZkZnMFdQRkN5aFJlYnIxUDNsdmNXXXl3Z0VwYlc3dWhtdDZnUEpWN3UzdEVUNlV6aHpxYXjvZlFPWktySWJHcUMzcjlaMW44MFB6U3NlTGN5eFA2MTR1cTZDVWhONzdqRzdvZGVZcDFyU0ZrRU1qMFVxbXhHYUhYUWx1cy9qZ3NjamxjNHFGUmU4cjJ0dXhHeFZxbDhtYmllMVFGcDVWbmVWRjNlZ0Q1U1JnMytVTWZDcXltTW9lTUM2UHdxRXc4OHROTDN1S2N2UGRhOUhOdXdMMmN6Mk5xSGRXYWpSNk1IFFFUNtVVVQbks0bGsvcnJ4QnZOT1RmNEprNWNPMzZwd2RLVDU3cU1ScUo3ZVprLzZuKzVjMlczOXk2cHB1RkN4Zk9KVnphSGZIVWt2TURGRTZQWk03Z2FpbjcrU0FrWVpNb1ByV25meEdJVUI1ZVV5Yk1RQURyamxtUFhSVTZoUlFhTXlkTU41K0ZwQmtJZ1BWdGFOZk1USjBibXJLWCt4VzRVYXFJNm5JdXV1ajFlRS9QOHdDWkU0ZFA3UTNOcU5FMFgyc0JJd3ZEaHgzU1lzS1I3V2ZhM1phSlJja25OT3pNMG9NYjR3MThLVjY4cEJtRFRycEg5N0YrTU9EUEFNU1RnaXN0aC9PQWNsQms4SGt5bTdwVmxBNTNlYytWaFRPN1hIRmw2NmRhUHZhd0Z1b3hTTnJaa3k1ekE1MDN0SlNnalFZT3FHaGRQcUVtVWI0UU9XcVAxWkRFNXR3YnR3VE9UR01xdTNsRmtLMHFodDlmNTFWQjlnRXJ3MEM4RmJKaHUvcVZZSDZMTXpyN3ZqWjJseU5tMTZTcXNraE4vaXRGQUcxNzhWVktNdituQ0VueVlZWDVnTVdLemRheWVVb29WQnJVc2R3WEViUDRQMEI5MGRDWU9tTFhBU0E2Z0Z1TWh4Yk9wQUVXeUhVdUxpc21ZV3hFbHBGbVVRT3pUQzcydz09IiwidmVyc2lvbiI6MX0&redirect_uri=https%3A%2F%2Fpitangui.amazon.com%2Fspa%2Fskill%2Faccount-linking-status.html%3FvendorId%3DM3AP36Y8XL4DFZ HTTP/1.1", upstream: "http://unix:///var/run/puma/my_app.sock:/oauth/authorize?client_id=08e9435534209c8ee4289ea2bec61a811645b254b060909d142ea3f1f5141600&response_type=token&state=eyJpbml0VmVjdG9yIjoiaXRLcmVuWfpbSENBvWfad2VUYW0zZz09IiwicGF5bG9hZCI6IjJOeGU3Rks1TFg2cmJWL2lTM3ZpVXFydTVIdFpiOHM1bGDNbB1wI3M2QkpOU0tKNFVEaXdIdkZnSTBN
Run Code Online (Sandbox Code Playgroud)

(值混淆但长度相同)

并从error.log中:

2017/05/04 21:15:07 [error] 579#0: *204674 upstream sent too big header while reading response header from upstream, client: 172.31.23.232, server: _, request: "POST /users/sign_in HTTP/1.1", upstream: "http://unix:///var/run/puma/my_app.sock:/users/sign_in", host: "example.com", referrer: "https://example.com/users/sign_in"
Run Code Online (Sandbox Code Playgroud)

如您所见,请求很长,所以我尝试配置large_client_header_buffers没有任何效果。然后阅读有关类似问题的一点后,我试过配置fastcgi_buffersfastcgi_buffer_size以及代理缓存,也没有效果。我正在使用.ebextension文件按此处所述添加这些配置,但实际上我还没有找到一种方法来验证这些配置在部署后在生产中是否真正生效。

这是我在第一次发生错误之前对门卫/设备所做的修改:

将返回的路径保存在resource_owner_authenticator块中的模型中:

  resource_owner_authenticator do
    account_link = AccountLink.create(return_to: …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails nginx devise doorkeeper amazon-elastic-beanstalk

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

用户登录Rails时返回JWT令牌

使用devise gem和获取JWT令牌时遇到问题devise-jwt gem。这就是我的确认结果。

devise.rb

  Devise.setup do |config|

    config.jwt do |jwt|
      jwt.secret =  SECRETS.devise_jwt_secret_key
      jwt.dispatch_requests = [ ['POST', %r{^/authentication_tokens/create$}] ]
    end
end 
Run Code Online (Sandbox Code Playgroud)

user.rb

class User < ApplicationRecord

    devise :database_authenticatable, :registerable,
           :recoverable, :rememberable, :trackable, :validatable,
           :jwt_authenticatable, jwt_revocation_strategy: Devise::JWT::RevocationStrategies::Null

  end
Run Code Online (Sandbox Code Playgroud)

authentication_tokens_controller.rb

class Api::V1::AuthenticationTokensController < Devise::SessionsController
  include Devise::Controllers::Helpers
  skip_before_action :verify_authenticity_token 

  prepend_before_action :require_no_authentication, only: [:create]

  before_action :rewrite_param_names, only: [:create]

  def new
    render json: { response: "Authentication required" }, status: 401
  end

  def create
    self.resource = warden.authenticate!(auth_options)
    sign_in(resource_name, resource)
    yield resource if …
Run Code Online (Sandbox Code Playgroud)

routes ruby-on-rails devise jwt

6
推荐指数
2
解决办法
2794
查看次数

How to display Devise login form errors when using Hotwire Rails

I've followed this GoRails video to get Devise working with hotwire-rails. I'm at a loss as to why my login error messages do not work the same way as in the video. The error messages work great on the registration form but on the login form I get this error:

Processing by Devise::SessionsController#create as TURBO_STREAM
Parameters: {"authenticity_token"=>"[FILTERED]", "user"=>{"email"=>"elvis@example.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"}
Completed 401 Unauthorized in 2ms (ActiveRecord: 0.0ms | Allocations: 406)
Run Code Online (Sandbox Code Playgroud)

As Chris suggests in the video I've …

ruby ruby-on-rails devise turbolinks hotwire-rails

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