ホームページ >バックエンド開発 >Golang >Beego と OAuth2 を使用したサードパーティ ログインの実装

Beego と OAuth2 を使用したサードパーティ ログインの実装

王林
王林オリジナル
2023-06-22 20:34:371259ブラウズ

インターネットの急速な発展に伴い、サードパーティのログインはオンライン生活に不可欠な部分になりました。サードパーティ ログインは、より便利、高速、安全なログイン方法をユーザーに提供し、従来の登録ログイン方法よりも人気があります。現在、市場に出回っているサードパーティ ログインには、主に QQ、WeChat、Weibo などの大規模なソーシャル プラットフォームが含まれています。サードパーティのログイン機能を迅速に実装するにはどうすればよいですか?この記事では、Beego と OAuth2 を使用してサードパーティのログイン機能を実装する方法を紹介します。

1. Beego の概要

Beego は、オープンソースの高速 Go プログラミング フレームワークです。柔軟性と拡張性が高く、多数のツールとライブラリを提供します。 Beego は、開発者が Web アプリケーションを迅速に構築できるように支援し、自動ルート管理、テンプレート システム、静的ファイルの提供などの重要な機能を提供します。

2. OAuth2 プロトコルの概要

OAuth2 は、パスワードやその他の機密情報を第三者に共有することなく、ユーザーが自分に代わって動作するように他のアプリケーションを承認できるようにする承認フレームワーク プロトコルです。 - パーティーサービス。このプロトコルは、リソース所有者、リソース サーバー、クライアント、認証サーバーの 4 つの役割を定義します。このうち、リソース所有者はアクセス権を持つユーザーを指し、リソースサーバーは情報リソースをホストするサーバーを指し、クライアントは保護されたリソースへのアクセスを要求するソフトウェアプログラムを指し、認証サーバーはクライアントの認証を指します。 ID と、保護されたリソースやサービスへのアクセスの承認。

3. Beego と OAuth2 を使用してサードパーティ ログインを実装する

  1. Beego プロジェクトを作成する

まず、ローカル用の Beego プロジェクトを作成する必要があります。開発とテスト。次のコマンドを使用します (最初に Beego をインストールする必要があります):

bee new thirdpartylogin
  1. 必要なライブラリをインストールします

github などの必要なライブラリをいくつかインストールする必要があります。 com/astaxie /beego および github.com/astaxie/beego/orm は、次のコマンドを使用してインストールできます:

go get github.com/astaxie/beego
go get github.com/astaxie/beego/orm
  1. データベースの作成

us ユーザー情報とサードパーティのログイン情報を保存するデータベースを作成する必要があります。 MySQL または PostgreSQL データベースを使用できます。この記事では、MySQL データベースを使用します。ユーザー テーブルとサードパーティ ログイン テーブルを作成する SQL ステートメントは次のとおりです。

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. サードパーティ ログインの構成

サードパーティ ログインを使用する必要があります。認証用。現在、QQ、WeChat、Weibo などの大規模なソーシャル プラットフォームを含む、さまざまなサードパーティのログイン方法が市場に出回っています。 QQ ログインを例にして説明します。

まず、QQ インターネット オープン プラットフォーム (https://connect.qq.com/) にアプリケーションを登録して、App IDApp Key## を取得する必要があります。 #。次に、次のコードを Beego プロジェクトに追加してユーザーの承認を取得する必要があります。

func QQLogin(c *beego.Controller) {
    var state = c.GetString("state")
    var oauth = conf.GetQQOAuthConfig(state)

    authURL := oauth.AuthCodeURL(state)
    c.Redirect(http.StatusTemporaryRedirect, authURL)
} 

上記のコードでは、

state パラメーターを使用してユーザー リクエスト を識別します。 oauth オブジェクト QQ ログインに必要な構成情報が含まれています。 AuthCodeURL メソッドを使用して認証アドレスを生成し、ユーザーを認証ページにリダイレクトします。

次に、QQ コールバック リクエストを受信し、アクセス トークンを取得するには、次のコードを追加する必要があります。

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, "/")
    }
}

上記のコードでは、

Exchange メソッドを使用します。アクセス トークンを取得するには、fetchQQUserInfo メソッドを使用して QQ ユーザー情報を取得します。openid は、QQ ユーザーを一意に識別するために使用されます。次に、QQ ユーザー レコードがデータベースに存在するかどうかを確認し、存在する場合はアクセス トークンを更新し、存在しない場合は新しいアカウント レコードを作成します。

    認証と認可
最後に、ユーザーがサードパーティを通じてログインし、認可されていることを確認するために、認証と認可の機能を追加する必要があります。

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)
    })
}

上記のコードでは、ユーザー ID がセッションに存在するかどうかを確認し、存在しない場合はログイン ページにリダイレクトし、存在しない場合はリクエストの処理を続行します。

4. 概要

この記事では、Beego と OAuth2 を使用してサードパーティ ログインを実装する方法を紹介します。 QQログインを例に、ユーザー認証の取得、アクセストークンの取得、ユーザー記録の確認などの機能を紹介します。 Beego と OAuth2 を使用してサードパーティ ログイン機能を実装すると、より便利で高速かつ安全なログイン方法をユーザーに提供でき、開発者にもより効率的で優れた開発エクスペリエンスを提供できます。

以上がBeego と OAuth2 を使用したサードパーティ ログインの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。