Ini adalah dokumentasi untuk cabang omniauth dalam pengembangan. Anda dapat menemukan dokumentasi untuk rilis stabil terbaru di sini
Omniauth adalah perpustakaan yang menstandarkan otentikasi multi-penyedia untuk aplikasi web. Itu diciptakan untuk menjadi kuat, fleksibel, dan melakukan sesedikit mungkin. Setiap pengembang dapat membuat strategi untuk omniauth yang dapat mengotentikasi pengguna melalui sistem yang berbeda. Strategi Omniauth telah dibuat untuk semuanya dari Facebook hingga LDAP.
Untuk menggunakan Omniauth dalam aplikasi Anda, Anda perlu memanfaatkan satu atau lebih strategi. Strategi -strategi ini umumnya dirilis secara individual sebagai rubygem, dan Anda dapat melihat daftar yang dipelihara komunitas di wiki untuk proyek ini.
Salah satu strategi, yang disebut Developer , dimasukkan dengan omniauth dan memberikan strategi yang sepenuhnya tidak aman dan tidak dapat digunakan yang secara langsung meminta pengguna untuk informasi otentikasi dan kemudian melewatinya. Anda dapat menggunakannya sebagai placeholder ketika Anda memulai pengembangan dan dengan mudah bertukar dalam strategi lain nanti.
Setiap strategi Omniauth adalah middleware rak. Itu berarti Anda dapat menggunakannya dengan cara yang sama seperti Anda menggunakan middleware rak lainnya. Misalnya, untuk menggunakan strategi pengembang bawaan dalam aplikasi Sinatra Anda mungkin melakukan ini:
require 'sinatra'
require 'omniauth'
class MyApplication < Sinatra :: Base
use Rack :: Session :: Cookie
use OmniAuth :: Strategies :: Developer
end Karena Omniauth dibangun untuk otentikasi multi-penyedia , Anda mungkin ingin meninggalkan ruang untuk menjalankan banyak strategi. Untuk ini, kelas OmniAuth::Builder bawaan memberi Anda cara mudah untuk menentukan beberapa strategi. Perhatikan bahwa tidak ada perbedaan antara kode berikut dan menggunakan setiap strategi secara individual sebagai middleware. Ini adalah contoh yang mungkin Anda masukkan ke dalam inisialisasi rel di config/initializers/omniauth.rb :
Rails . application . config . middleware . use OmniAuth :: Builder do
provider :developer unless Rails . env . production?
provider :twitter , ENV [ 'TWITTER_KEY' ] , ENV [ 'TWITTER_SECRET' ]
endAnda harus melihat dokumentasi untuk setiap penyedia yang Anda gunakan untuk persyaratan inisialisasi tertentu.
Omniauth adalah perpustakaan yang sangat rendah. Ini dirancang untuk menjadi kotak hitam yang dapat Anda kirimkan kepada pengguna aplikasi saat Anda membutuhkan otentikasi dan kemudian mendapatkan informasi kembali. Omniauth sengaja dibangun untuk tidak secara otomatis bergaul dengan model pengguna atau membuat asumsi tentang berapa banyak metode otentikasi yang mungkin ingin Anda gunakan atau apa yang mungkin ingin Anda lakukan dengan data setelah pengguna telah diautentikasi. Ini membuat Omniauth sangat fleksibel. Untuk menggunakan Omniauth, Anda hanya perlu mengarahkan pengguna ke /auth/:provider , di mana :provider adalah nama strategi (misalnya, developer atau twitter ). Dari sana, Omniauth akan mengambil alih dan membawa pengguna melalui langkah -langkah yang diperlukan untuk mengotentikasi mereka dengan strategi yang dipilih.
Setelah pengguna diautentikasi, apa yang Anda lakukan selanjutnya? Omniauth hanya menetapkan hash khusus yang disebut hash otentikasi pada lingkungan rak permintaan ke /auth/:provider/callback . Hash ini berisi banyak informasi tentang pengguna seperti Omniauth dapat berkumpul dari strategi yang digunakan. Anda harus mengatur titik akhir dalam aplikasi Anda yang cocok dengan URL callback dan kemudian melakukan langkah apa pun yang diperlukan untuk aplikasi Anda.
Kunci omniauth.auth di lingkungan hash menyediakan hash otentikasi yang akan berisi informasi tentang pengguna yang baru saja diautentikasi termasuk ID unik, strategi yang hanya digunakan untuk otentikasi, dan detail pribadi seperti nama dan alamat email yang tersedia. Untuk deskripsi mendalam tentang apa yang mungkin dikandung hash otentikasi, lihat halaman wiki skema hash auth.
Perhatikan bahwa Omniauth tidak melakukan tindakan apa pun di luar menetapkan beberapa informasi lingkungan tentang permintaan panggilan balik. Ini sepenuhnya terserah Anda bagaimana Anda ingin mengimplementasikan rincian aliran otentikasi aplikasi Anda.
omniauth tidak kompatibel dengan rack_csrf. Untuk melakukannya, kode berikut perlu ditambahkan ke kode bootstrap aplikasi:
OmniAuth :: AuthenticityTokenProtection . default_options ( key : "csrf.token" , authenticity_param : "_csrf" ) Untuk memulai, tambahkan permata berikut
Gemfile :
gem 'omniauth'
gem "omniauth-rails_csrf_protection"Kemudian masukkan omniauth sebagai middleware
config/initializers/omniauth.rb :
Rails . application . config . middleware . use OmniAuth :: Builder do
provider :developer if Rails . env . development?
endPenyedia tambahan dapat ditambahkan di sini di masa depan. Selanjutnya kami memasang semuanya menggunakan rute, pengontrol dan tampilan login.
config/routes.rb :
get 'auth/:provider/callback' , to : 'sessions#create'
get '/login' , to : 'sessions#new'APP/CONTROLER/SESSIONS_CONTROLLER.RB :
class SessionsController < ApplicationController
def new
render :new
end
def create
user_info = request . env [ 'omniauth.auth' ]
raise user_info # Your own session management should be placed here.
end
endAplikasi/Views/Sesi/new.html.erb :
<%= form_tag('/auth/developer', method: 'post', data: {turbo: false}) do %>
< button type =' submit ' > Login with Developer </ button >
<% end %> Sekarang jika Anda mengunjungi /login dan klik tombol login, Anda akan melihat layar login pengembang Omniauth. Setelah mengirimkannya, Anda dikembalikan ke aplikasi Anda di Sessions#create . Peningkatan sekarang harus menampilkan semua detail Omniauth yang Anda miliki untuk mengintegrasikannya ke dalam manajemen pengguna Anda sendiri.
Jika Anda ingin UserManagement di luar kotak, Anda harus mempertimbangkan untuk menggunakan Omniauth melalui Devise. Silakan kunjungi halaman Devise GitHub untuk informasi lebih lanjut.
Middleware berikut (secara default) disertakan untuk manajemen sesi dalam aplikasi Rails. Saat menggunakan Omniauth dengan API Rails, Anda harus menambahkan salah satu middleware yang diperlukan ini kembali:
ActionDispatch::Session::CacheStoreActionDispatch::Session::CookieStoreActionDispatch::Session::MemCacheStore Trik untuk menambahkan ini kembali adalah bahwa, secara default, mereka disahkan session_options saat ditambahkan (termasuk kunci sesi), jadi Anda tidak bisa hanya menambahkan inisialisasi session_store.rb , tambahkan use ActionDispatch::Session::CookieStore dan memiliki sesi berfungsi seperti biasa.
Untuk lebih jelasnya: Sesi dapat berhasil, tetapi opsi sesi Anda akan diabaikan (yaitu kunci sesi akan default ke _session_id ). Alih -alih inisialisasi, Anda harus mengatur opsi yang relevan di suatu tempat sebelum middleware Anda dibangun (seperti application.rb ) dan meneruskannya ke middleware pilihan Anda, seperti ini:
Application.rb:
config . session_store :cookie_store , key : '_interslice_session'
config . middleware . use ActionDispatch :: Cookies # Required for all session management
config . middleware . use ActionDispatch :: Session :: CookieStore , config . session_options(Terima kasih @mltsy)
Omniauth mendukung logger yang dapat dikonfigurasi. Secara default, Omniauth akan masuk ke STDOUT tetapi Anda dapat mengonfigurasi ini menggunakan OmniAuth.config.logger :
# Rails application example
OmniAuth . config . logger = Rails . logger Parameter URL origin biasanya digunakan untuk menginformasikan dari mana pengguna berasal dan dari mana, jika Anda memilih untuk menggunakannya, mereka ingin kembali ke. Omniauth mendukung pengaturan berikut yang dapat dikonfigurasi pada tingkat penyedia:
Bawaan :
provider :twitter , ENV [ 'KEY' ] , ENV [ 'SECRET' ]
POST /auth/twitter /?o rigin = [ URL ]
# If the `origin` parameter is blank, `omniauth.origin` is set to HTTP_REFERERMenggunakan parameter asal bernama berbeda :
provider :twitter , ENV [ 'KEY' ] , ENV [ 'SECRET' ] , origin_param : 'return_to'
POST /auth/twitter /?r eturn_to = [ URL ]
# If the `return_to` parameter is blank, `omniauth.origin` is set to HTTP_REFERERCacat :
provider :twitter , ENV [ 'KEY' ] , ENV [ 'SECRET' ] , origin_param : false
POST /auth/twitter
# This means the origin should be handled by your own application.
# Note that `omniauth.origin` will always be blank. Wiki Omniauth telah secara aktif mempertahankan dokumentasi mendalam untuk Omniauth. Seharusnya berhenti pertama Anda jika Anda bertanya-tanya tentang tampilan yang lebih mendalam pada Omniauth, cara kerjanya, dan cara menggunakannya.
Tersedia sebagai bagian dari langganan tidelift.
Pemelihara Omniauth dan ribuan paket lainnya bekerja dengan Tidelift untuk memberikan dukungan dan pemeliharaan komersial untuk paket open source yang Anda gunakan untuk membangun aplikasi Anda. Hemat waktu, kurangi risiko, dan tingkatkan kesehatan kode, sambil membayar pemelihara paket yang Anda gunakan. Pelajari lebih lanjut.
Omniauth diuji di bawah 2.5, 2.6, 2.7, 3.0, 3.1, 3.2, Truffleruby, dan Jruby.
Perpustakaan ini bertujuan untuk mematuhi Semantic Versioning 2.0.0. Pelanggaran skema ini harus dilaporkan sebagai bug. Secara khusus, jika versi minor atau patch dirilis yang merusak kompatibilitas ke belakang, versi itu harus segera ditarik dan/atau versi baru harus segera dirilis yang mengembalikan kompatibilitas. Memecahkan perubahan pada API publik hanya akan diperkenalkan dengan versi utama baru. Sebagai hasil dari kebijakan ini, Anda dapat (dan harus) menentukan ketergantungan pada permata ini menggunakan kendala versi pesimistis dengan dua digit presisi. Misalnya:
spec.add_dependency 'omniauth', '~> 1.0'
Hak Cipta (C) 2010-2017 Michael Bleigh dan Intridea, Inc. Lihat Lisensi untuk detailnya.