首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用多字段的rubycas服务器对用户进行身份验证?

如何使用多字段的rubycas服务器对用户进行身份验证?
EN

Stack Overflow用户
提问于 2014-11-10 05:47:11
回答 2查看 257关注 0票数 3

我使用rubycas服务器构建了一个sso系统,使用devise来完成用户的系统,但现在我的问题是,rubycas服务器只有一个字段像'email‘,我想使用'email’/ 'tel‘/’昵称‘来登录用户。维基中没有更多的信息

代码语言:javascript
复制
authenticator:
 class: CASServer::Authenticators::SQLBcrypt
 database:
   adapter: mysql2
   database: xxxx
   username: root
   password: xxxx
   host: localhost
 user_table: users
 username_column: email # tel/nickname
 password_column: encrypted_password

为我糟糕的英语感到抱歉!帮帮我,非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-26 07:00:53

在rubycas-server/lib/casserver/authenticators/sql_bcrypt.rb中修改以下代码

代码语言:javascript
复制
  def matching_users
    results = user_model.find(:all, :conditions => ["#{username_column} = ?", @username])
    results.select { |user| BCrypt::Password.new(user.send(password_column.to_sym)) == @password }
  end

代码语言:javascript
复制
  def matching_users
    if username_column.include?(',')
      columns = username_column.split(',')
      sql = ''
      conditions = []
      columns.each do |field|
        if sql.length != 0
          sql += ' or '
        end
        sql += "#{field} = ?"
        conditions << @username
      end
      conditions.unshift(sql)
    else
      conditions = ["#{username_column} = ?", @username]
    end
    results = user_model.find(:all, :conditions => conditions)
    results.select { |user| BCrypt::Password.new(user.send(password_column.to_sym)) == @password }
  end

然后,您可以在config.yml中使用mutli,如下所示:

代码语言:javascript
复制
authenticator:
 class: CASServer::Authenticators::SQLBcrypt
 database:
   adapter: mysql2
   database: test
   username: root
   password: map
   host: localhost
 user_table: users
 username_column: email,nickname,tel
 password_column: encrypted_password
票数 1
EN

Stack Overflow用户

发布于 2014-11-12 10:08:04

我想这是不可能的。在官方的存储库中可以看到,这个身份验证器只匹配给定的列名和用户名:

代码语言:javascript
复制
  def matching_users
    results = user_model.find(:all, :conditions => ["#{username_column} = ?", @username])
    results.select { |user| BCrypt::Password.new(user.send(password_column.to_sym)) == @password }
  end

对于您的情况,最好的方法是编写与email/tel/nickname匹配的自定义身份验证器。这是非常困难的登录名称,尽管,考虑一些更友好的用户。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26837521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档