如何为用户的 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 帐户登录我的应用程序,我将在数据库中创建一条用户记录。我有两个问题:
- 我应该在数据库中创建用户记录吗?
- 如果我创建用户,我必须提供密码和password_confirmation,否则验证会失败,如何跳过密码验证或生成随机密码?
我使用 SecureRandom
库生成随机字符串作为密码。
http://ruby-doc.org/stdlib-2.1.2/libdoc/securerandom/rdoc/SecureRandom.html
我将 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 帐户登录我的应用程序,我将在数据库中创建一条用户记录。我有两个问题:
- 我应该在数据库中创建用户记录吗?
- 如果我创建用户,我必须提供密码和password_confirmation,否则验证会失败,如何跳过密码验证或生成随机密码?
我使用 SecureRandom
库生成随机字符串作为密码。
http://ruby-doc.org/stdlib-2.1.2/libdoc/securerandom/rdoc/SecureRandom.html