Rumah > Artikel > pembangunan bahagian belakang > Laksanakan log masuk pihak ketiga menggunakan Beego dan OAuth2
Dengan perkembangan pesat Internet, log masuk pihak ketiga telah menjadi bahagian yang amat diperlukan dalam kehidupan dalam talian. Log masuk pihak ketiga memberikan pengguna kaedah log masuk yang lebih mudah, lebih pantas dan selamat, serta lebih popular daripada kaedah log masuk pendaftaran tradisional. Pada masa ini, log masuk pihak ketiga di pasaran terutamanya termasuk platform sosial yang besar seperti QQ, WeChat dan Weibo. Bagaimana untuk melaksanakan fungsi log masuk pihak ketiga dengan cepat? Artikel ini akan memperkenalkan cara menggunakan Beego dan OAuth2 untuk melaksanakan fungsi log masuk pihak ketiga.
1. Pengenalan kepada Beego
Beego ialah rangka kerja pengaturcaraan Go fast sumber terbuka. Ia sangat fleksibel dan boleh diperluaskan serta menyediakan sejumlah besar alatan dan perpustakaan. Beego boleh membantu pembangun membina aplikasi web dengan cepat dan menyediakan beberapa ciri penting, seperti pengurusan laluan automatik, sistem templat dan penyajian fail statik.
2. Pengenalan kepada protokol OAuth2
OAuth2 ialah protokol rangka kerja kebenaran yang membolehkan pengguna membenarkan aplikasi lain beroperasi bagi pihak mereka tanpa berkongsi kata laluan dan maklumat sensitif lain kepada pengguna mengakses pihak ketiga -perkhidmatan parti. Protokol ini mentakrifkan empat peranan: pemilik sumber, pelayan sumber, klien dan pelayan pengesahan. Antaranya, pemilik sumber merujuk kepada pengguna yang mempunyai hak capaian, pelayan sumber merujuk kepada pelayan yang menjadi tuan rumah sumber maklumat, klien merujuk kepada program perisian yang meminta akses kepada sumber yang dilindungi, dan pelayan pengesahan merujuk kepada pengesahan klien. identiti dan membenarkan akses kepada sumber yang dilindungi.
3. Gunakan Beego dan OAuth2 untuk melaksanakan log masuk pihak ketiga
Pertama, kita perlu mencipta projek Beego untuk tempatan pembangunan dan ujian. Gunakan arahan berikut (Beego perlu dipasang dahulu):
bee new thirdpartylogin
Kami perlu memasang beberapa perpustakaan yang diperlukan, termasuk github.com/astaxie/beego
dan github.com/astaxie/beego/orm
, Ia boleh dipasang menggunakan arahan berikut:
go get github.com/astaxie/beego go get github.com/astaxie/beego/orm
Kami perlu mencipta pangkalan data untuk menyimpan maklumat pengguna dan maklumat log masuk pihak ketiga . Anda boleh menggunakan pangkalan data MySQL atau PostgreSQL. Dalam artikel ini, kami menggunakan pangkalan data MySQL. Berikut ialah pernyataan SQL untuk mencipta jadual pengguna dan jadual log masuk pihak ketiga:
CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(64) NOT NULL, `password` varchar(128) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `oauth` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `user_id` int(11) unsigned NOT NULL, `provider` varchar(64) NOT NULL, `provider_user_id` varchar(64) NOT NULL, `access_token` varchar(128) NOT NULL, `refresh_token` varchar(128) NOT NULL, `expire_at` int(11) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Kami perlu menggunakan log masuk pihak ketiga untuk pengesahan. Pada masa ini terdapat pelbagai kaedah log masuk pihak ketiga di pasaran, termasuk platform sosial yang besar seperti QQ, WeChat dan Weibo. Mari kita ambil log masuk QQ sebagai contoh untuk menerangkan.
Pertama, kita perlu mendaftarkan permohonan pada Platform Terbuka Internet QQ (https://connect.qq.com/) untuk mendapatkan App ID
dan App Key
. Kedua, kita perlu menambah kod berikut pada projek Beego untuk mendapatkan kebenaran pengguna:
func QQLogin(c *beego.Controller) { var state = c.GetString("state") var oauth = conf.GetQQOAuthConfig(state) authURL := oauth.AuthCodeURL(state) c.Redirect(http.StatusTemporaryRedirect, authURL) }
Dalam kod di atas, parameter state
digunakan untuk mengenal pasti permintaan pengguna dan objek oauth
mengandungi konfigurasi yang diperlukan untuk maklumat log masuk QQ. Kami menggunakan kaedah AuthCodeURL
untuk menjana alamat kebenaran dan mengubah hala pengguna ke halaman kebenaran.
Seterusnya, kami perlu menambah kod berikut untuk menerima permintaan panggil balik QQ dan mendapatkan token akses:
func QQLoginCallback(c *beego.Controller) { var state = c.GetString("state") var code = c.GetString("code") var oauth = conf.GetQQOAuthConfig(state) token, err := oauth.Exchange(context.TODO(), code) if err != nil { log.Println(err) c.Abort("500") } data, err := fetchQQUserInfo(token.AccessToken) if err != nil { log.Println(err) c.Abort("500") } openid := data.GetString("openid") if openid == "" { log.Println("openid is blank") c.Abort("500") } account := models.GetAccountByProvider("qq", openid) if account != nil { _ = models.UpdateAccountAccessToken(account, token.AccessToken) c.Redirect(http.StatusTemporaryRedirect, "/") } else { err := models.CreateAccount("qq", openid, token.AccessToken) if err != nil { log.Println(err) c.Abort("500") } c.Redirect(http.StatusTemporaryRedirect, "/") } }
Dalam kod di atas, kami menggunakan kaedah Exchange
untuk mendapatkan akses token dan gunakan fetchQQUserInfo
Kaedah untuk mendapatkan maklumat pengguna QQ, di mana openid
digunakan untuk mengenal pasti pengguna QQ secara unik. Seterusnya, kami menyemak sama ada rekod pengguna QQ wujud dalam pangkalan data, dan jika ya, kemas kini token aksesnya, jika tidak, buat rekod akaun baharu.
Akhir sekali, kami perlu menambah fungsi pengesahan dan kebenaran untuk memastikan pengguna telah log masuk dan diberi kuasa melalui pihak ketiga.
func AuthRequired(handler http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { sess, err := store.Get(r, "session") if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } if _, ok := sess.Values["user_id"]; !ok { w.Header().Set("Location", "/login") w.WriteHeader(http.StatusSeeOther) return } handler.ServeHTTP(w, r) }) }
Dalam kod di atas, kami menyemak sama ada ID pengguna wujud dalam sesi, jika tidak maka ubah hala ke halaman log masuk, jika tidak, teruskan memproses permintaan.
4. Ringkasan
Artikel ini memperkenalkan cara menggunakan Beego dan OAuth2 untuk melaksanakan log masuk pihak ketiga. Kami menggunakan log masuk QQ sebagai contoh untuk memperkenalkan cara mendapatkan kebenaran pengguna, mendapatkan token akses, menyemak rekod pengguna dan fungsi lain. Menggunakan Beego dan OAuth2 untuk melaksanakan fungsi log masuk pihak ketiga boleh menyediakan pengguna dengan kaedah log masuk yang lebih mudah, lebih pantas dan selamat, dan juga boleh membawa pembangun pengalaman pembangunan yang lebih cekap dan lebih baik.
Atas ialah kandungan terperinci Laksanakan log masuk pihak ketiga menggunakan Beego dan OAuth2. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!