Rumah >pembangunan bahagian belakang >Golang >Laksanakan log masuk pihak ketiga menggunakan Beego dan OAuth2

Laksanakan log masuk pihak ketiga menggunakan Beego dan OAuth2

王林
王林asal
2023-06-22 20:34:371259semak imbas

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

  1. Buat projek Beego

Pertama, kita perlu mencipta projek Beego untuk tempatan pembangunan dan ujian. Gunakan arahan berikut (Beego perlu dipasang dahulu):

bee new thirdpartylogin
  1. Pasang perpustakaan yang diperlukan

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
  1. Buat pangkalan data

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;
  1. Mengkonfigurasi log masuk pihak ketiga

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 fetchQQUserInfoKaedah 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.

  1. Pengesahan dan Kebenaran

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn