rails6 + devise를 사용하여 Yahoo 인증 기능을 만드십시오!
11127 단어 yahooYahoo!ID 연계Rails5devise
rails6에서 Yahoo 인증 기능을 만듭니다.
Devise 및 Omniauth 설치
Gemfile에 설명합니다.
gem 'devise'
gem 'omniauth'
gem 'omniauth-yahoojp'
⇃
$ bundle install
이제 devise omniauth omniauth-yahoojp가 bundle install되었습니다!
Devise 설정 등
$ rails g devise:install
$ rails g devise user
$ rails g devise:views
$ rails g devise:controllers users
이것들을 수행합니다.
그리고 app/models/user.rb에
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
그리고 있다고 생각합니다.
:omniauthable, omniauth_providers: [:yahoojp]
이것을 추가하십시오.
덧붙여서 이것은 omniauthable를 이 모델에서 사용하는 느낌입니다.
다음 사용자 모델에
name provider uid를 추가하여 yahoo의 데이터를 저장하는 열을 추가합니다.
$ rails g migration AddOminiauthToUsers
그리고 실행하여 migration 파일을 만들 수 있기 때문에
가능한 migration 파일에
def change
add_column :users, :uid, :string
add_column :users, :provider, :string
add_column :users, :token, :text
end
를 기술 해주세요.
그리고
$ rails db:migrate
그렇다면 컬럼 추가되었을 것입니다!
Yahoo의 Key라든지 얻는다.
htps : ///에. 로 ゔぇぺぺr. 야호오. 이. jp/다 sh보아 rd/
이 URL을 방문하여
새로운 응용 프로그램 개발을 누르십시오.
⇃하면 이런 화면이 됩니다만
이 사이트 URL
localhost:3000
해주세요.
사이트명이나 어플리케이션의 설명은 자유롭게.
그리고 등록해 드리겠습니다.
등록한 후 다시 한 번 애플리케이션 관리로 돌아가서 콜백 URL을 설정합니다.
이렇게 localhost : 3000/users/auth/yahoojp/callback
로 줄 것입니다.
환경 변수 설정
Gemfile에
gem 'dotenv-rails'
추가
$ bundle install
그리고 .env 파일을 추가하십시오.
.env 파일에
YAHOOJP_KEY="YAHOOのClientIDを記述"
YAHOOJP_SECRET="YAHOOのシークレットキーを記述"
그리고 .gitinore 파일에
/.env
라고 씁니다. 이제 비밀 키와 ClientID를 환경 변수로 사용할 수 있습니다!
그건 그렇고, 비밀 키와 ClientID는 흔들리지 않으므로 조심하십시오.
Yahoo 인증 구현
routes.rb
devise_for :users
그렇다고 생각합니다.
devise_for :users, controllers: {
omniauth_callbacks: "users/omniauth_callbacks"
}
get '/auth/:provider/callback' => 'users/omniauth_callbacks#yahoojp', as: "helloyahoo" # ←これ居るかわからないけど一応。。
그리고 추가하십시오.
config/devise.rb에
config.omniauth :yahoo_jp, ENV['YAHOOJP_KEY'], ENV['YAHOOJP_SECRET'] #必要なのかわからないけど一応..
config/initializers/omniauth.rb 파일 추가
omniauth.rb에
Rails.application.config.middleware.use OmniAuth::Builder do
provider :yahoojp, ENV['YAHOOJP_KEY'], ENV['YAHOOJP_SECRET'],
{
:scope => 'openid profile email address'
# :provider_ignores_state => true これを追加するのはおすすめしません。
}
end
그리고 user.rb에
def self.find_for_yahoo_jp(auth)
user = User.where(email: auth.info.email, provider: auth.provider).first
unless user
user = User.create!(name: auth.info.name,
provider: auth.provider,
email: auth.info.email,
uid: auth.uid,
token: auth.credentials.token,
password: Devise.friendly_token[0, 20])
end
user
end
추가.
그리고 app/controllers/users/omniauth_callbacks_controller.rb
에
def failure
@user = Sns.find_for_yahoo_jp(request.env['omniauth.auth'])
if @user.persisted?
flash[:notice] = I18n.t 'devise.omniauth_callbacks.success',
:kind => "Yahoo"
sign_in_and_redirect @user, :event => :authentication
else
session['devise.yahoo_data'] = request.env['omniauth.auth'].except("extra")
redirect_to new_user_registration_url
end
end
추가.
app/views/devise/registrations/new.html.erb
<h2><%= link_to "Yahoo! JAPAN で登録",user_yahoojp_omniauth_authorize_path %>
이것으로 할 수 있다고 생각합니다.
참고
끝에
엔지니어가 댓글을 달 수있었습니다.
조언 코멘트를 읽어보십시오.
그래서 Rails에서 Yahoo 로그인 인증을 만드는 기사가 너무 적어 꽤 고전했습니다.
뭔가 실수 등이 있으면 코멘트하십시오.
감사합니다.
Reference
이 문제에 관하여(rails6 + devise를 사용하여 Yahoo 인증 기능을 만드십시오!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/asobisarch/items/0c61aead27dbbc55484d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
gem 'devise'
gem 'omniauth'
gem 'omniauth-yahoojp'
$ bundle install
$ rails g devise:install
$ rails g devise user
$ rails g devise:views
$ rails g devise:controllers users
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
:omniauthable, omniauth_providers: [:yahoojp]
$ rails g migration AddOminiauthToUsers
def change
add_column :users, :uid, :string
add_column :users, :provider, :string
add_column :users, :token, :text
end
$ rails db:migrate
gem 'dotenv-rails'
$ bundle install
YAHOOJP_KEY="YAHOOのClientIDを記述"
YAHOOJP_SECRET="YAHOOのシークレットキーを記述"
/.env
devise_for :users
devise_for :users, controllers: {
omniauth_callbacks: "users/omniauth_callbacks"
}
get '/auth/:provider/callback' => 'users/omniauth_callbacks#yahoojp', as: "helloyahoo" # ←これ居るかわからないけど一応。。
config.omniauth :yahoo_jp, ENV['YAHOOJP_KEY'], ENV['YAHOOJP_SECRET'] #必要なのかわからないけど一応..
Rails.application.config.middleware.use OmniAuth::Builder do
provider :yahoojp, ENV['YAHOOJP_KEY'], ENV['YAHOOJP_SECRET'],
{
:scope => 'openid profile email address'
# :provider_ignores_state => true これを追加するのはおすすめしません。
}
end
def self.find_for_yahoo_jp(auth)
user = User.where(email: auth.info.email, provider: auth.provider).first
unless user
user = User.create!(name: auth.info.name,
provider: auth.provider,
email: auth.info.email,
uid: auth.uid,
token: auth.credentials.token,
password: Devise.friendly_token[0, 20])
end
user
end
def failure
@user = Sns.find_for_yahoo_jp(request.env['omniauth.auth'])
if @user.persisted?
flash[:notice] = I18n.t 'devise.omniauth_callbacks.success',
:kind => "Yahoo"
sign_in_and_redirect @user, :event => :authentication
else
session['devise.yahoo_data'] = request.env['omniauth.auth'].except("extra")
redirect_to new_user_registration_url
end
end
<h2><%= link_to "Yahoo! JAPAN で登録",user_yahoojp_omniauth_authorize_path %>
Reference
이 문제에 관하여(rails6 + devise를 사용하여 Yahoo 인증 기능을 만드십시오!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/asobisarch/items/0c61aead27dbbc55484d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)