インターネットの急速な発展に伴い、サードパーティのログインはオンライン生活に不可欠な部分になりました。サードパーティ ログインは、より便利、高速、安全なログイン方法をユーザーに提供し、従来の登録ログイン方法よりも人気があります。現在、市場に出回っているサードパーティ ログインには、主に QQ、WeChat、Weibo などの大規模なソーシャル プラットフォームが含まれています。サードパーティのログイン機能を迅速に実装するにはどうすればよいですか?この記事では、Beego と OAuth2 を使用してサードパーティのログイン機能を実装する方法を紹介します。
1. Beego の概要
Beego は、オープンソースの高速 Go プログラミング フレームワークです。柔軟性と拡張性が高く、多数のツールとライブラリを提供します。 Beego は、開発者が Web アプリケーションを迅速に構築できるように支援し、自動ルート管理、テンプレート システム、静的ファイルの提供などの重要な機能を提供します。
2. OAuth2 プロトコルの概要
OAuth2 は、パスワードやその他の機密情報を第三者に共有することなく、ユーザーが自分に代わって動作するように他のアプリケーションを承認できるようにする承認フレームワーク プロトコルです。 - パーティーサービス。このプロトコルは、リソース所有者、リソース サーバー、クライアント、認証サーバーの 4 つの役割を定義します。このうち、リソース所有者はアクセス権を持つユーザーを指し、リソースサーバーは情報リソースをホストするサーバーを指し、クライアントは保護されたリソースへのアクセスを要求するソフトウェアプログラムを指し、認証サーバーはクライアントの認証を指します。 ID と、保護されたリソースやサービスへのアクセスの承認。
3. Beego と OAuth2 を使用してサードパーティ ログインを実装する
まず、ローカル用の Beego プロジェクトを作成する必要があります。開発とテスト。次のコマンドを使用します (最初に Beego をインストールする必要があります):
bee new thirdpartylogin
github などの必要なライブラリをいくつかインストールする必要があります。 com/astaxie /beego
および github.com/astaxie/beego/orm
は、次のコマンドを使用してインストールできます:
go get github.com/astaxie/beego go get github.com/astaxie/beego/orm
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;
サードパーティ ログインを使用する必要があります。認証用。現在、QQ、WeChat、Weibo などの大規模なソーシャル プラットフォームを含む、さまざまなサードパーティのログイン方法が市場に出回っています。 QQ ログインを例にして説明します。
まず、QQ インターネット オープン プラットフォーム (https://connect.qq.com/) にアプリケーションを登録して、App ID
と App 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 メソッドを使用して認証アドレスを生成し、ユーザーを認証ページにリダイレクトします。
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) }) }
以上がBeego と OAuth2 を使用したサードパーティ ログインの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。