如何为用户的 github 帐户设置密码?

How to set password for user's github account?

我将 GitHub OAuth 集成到我的 rails 应用程序,用户可以通过 github 帐户登录我的 rails 应用程序,我不想使用第三个派对宝石,如 OmniAuth、warden-github 等。

if !authenticated?
  authenticate!
else
  access_token = session[:access_token]
  scopes = []
  begin
    auth_result = RestClient.get('https://api.github.com/user',
                                 {:params => {:access_token => access_token},
                                  :accept => :json})
  rescue => e
    session[:access_token] = nil
    return authenticate!
  end

  auth_result = JSON.parse(auth_result)

  user = User.find_by(github_id: auth_result["id"])
  if not user
    user_attr = {user_name: auth_result["login"],
                 email: auth_result["email"],
                 github_id: auth_result["id"],
                 avatar_url: auth_result["avatar_url"],
                 location: auth_result["location"],
                }
    user = User.create!(user_attr)
    session[:user_id] = user.id
  end

  if scopes.include? 'user:email'
    auth_result['private_emails'] =
      JSON.parse(RestClient.get('https://api.github.com/user/emails',
                     {:params => {:access_token => access_token},
                      :accept => :json}))
  end

  redirect_to user_path(user)

如果用户通过 github 帐户登录我的应用程序,我将在数据库中创建一条用户记录。我有两个问题:

  1. 我应该在数据库中创建用户记录吗?
  2. 如果我创建用户,我必须提供密码和password_confirmation,否则验证会失败,如何跳过密码验证或生成随机密码?

我使用 SecureRandom 库生成随机字符串作为密码。

http://ruby-doc.org/stdlib-2.1.2/libdoc/securerandom/rdoc/SecureRandom.html