Maison >développement back-end >Golang >Implémenter la connexion tierce à l'aide de Beego et OAuth2
Avec le développement rapide d'Internet, la connexion par un tiers est devenue un élément indispensable de la vie en ligne. La connexion tierce offre aux utilisateurs une méthode de connexion plus pratique, plus rapide et plus sûre, et est plus populaire que la méthode de connexion par enregistrement traditionnelle. Actuellement, les connexions tierces sur le marché incluent principalement les grandes plateformes sociales telles que QQ, WeChat et Weibo. Comment mettre en œuvre rapidement la fonction de connexion tierce ? Cet article explique comment utiliser Beego et OAuth2 pour implémenter une fonctionnalité de connexion tierce.
1. Introduction à Beego
Beego est un framework de programmation open source et rapide. Il est très flexible et extensible et fournit un grand nombre d'outils et de bibliothèques. Beego peut aider les développeurs à créer rapidement des applications Web et fournit des fonctionnalités importantes, telles que la gestion automatique des itinéraires, le système de modèles et le service de fichiers statiques.
2. Introduction au protocole OAuth2
OAuth2 est un protocole-cadre d'autorisation qui permet aux utilisateurs d'autoriser d'autres applications sans partager de mots de passe et d'autres informations sensibles à des programmes tiers. services de fête en leur nom. Ce protocole définit quatre rôles : propriétaire de ressources, serveur de ressources, client et serveur d'authentification. Parmi eux, le propriétaire de la ressource fait référence à l'utilisateur disposant de droits d'accès, le serveur de ressources fait référence au serveur qui héberge les ressources d'informations, le client fait référence au logiciel qui demande l'accès aux ressources protégées et le serveur d'authentification fait référence à la vérification des informations du client. identité et autoriser l’accès aux ressources protégées.
3. Utilisez Beego et OAuth2 pour implémenter la connexion tierce
Tout d'abord, nous besoin de créer un projet Beego pour le développement et les tests locaux. Utilisez la commande suivante (Beego doit d'abord être installé) :
bee new thirdpartylogin
Nous devons installer certaines bibliothèques nécessaires, notamment github.com/astaxie/beego
et github.com/astaxie/beego/orm
peuvent être installés à l'aide de la commande suivante : github.com/astaxie/beego
和github.com/astaxie/beego/orm
,可以使用以下命令安装:
go get github.com/astaxie/beego go get github.com/astaxie/beego/orm
我们需要创建一个数据库,以便存储用户信息和第三方登录信息。可以使用 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、微信、微博等大型社交平台。我们以 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
方法生成授权地址,并将用户重定向至授权页面。
接着,我们需要添加如下代码,接收 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
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) }) }
App ID
et le Clé d'application
. Deuxièmement, nous devons ajouter le code suivant au projet Beego pour obtenir l'autorisation de l'utilisateur : rrreee
Dans le code ci-dessus, le paramètrestate
est utilisé pour identifier la demande de l'utilisateur, oauth contient les informations de configuration requises pour la connexion QQ. Nous utilisons la méthode <code>AuthCodeURL
pour générer l'adresse d'autorisation et rediriger l'utilisateur vers la page d'autorisation. Ensuite, nous devons ajouter le code suivant pour recevoir la demande de rappel QQ et obtenir le jeton d'accès : #🎜🎜#rrreee#🎜🎜#Dans le code ci-dessus, nous utilisons Exchange Méthode pour obtenir le jeton d'accès, utilisez la méthode <code>fetchQQUserInfo
pour obtenir les informations sur l'utilisateur QQ, où openid
est utilisé pour identifier de manière unique l'utilisateur QQ. Ensuite, nous vérifions si l'enregistrement utilisateur QQ existe dans la base de données, et si c'est le cas, mettons à jour son jeton d'accès, sinon créons un nouvel enregistrement de compte. #🎜🎜##🎜🎜##🎜🎜#Authentification et autorisation#🎜🎜##🎜🎜##🎜🎜#Enfin, nous devons ajouter la fonction d'authentification et d'autorisation pour garantir que l'utilisateur s'est connecté et autorisé via un tierce personne. #🎜🎜#rrreee#🎜🎜#Dans le code ci-dessus, nous vérifions si l'ID utilisateur existe dans la session, sinon nous redirigeons vers la page de connexion, sinon nous continuons le traitement de la demande. #🎜🎜##🎜🎜#4. Résumé#🎜🎜##🎜🎜#Cet article explique comment utiliser Beego et OAuth2 pour implémenter la connexion tierce. Nous utilisons la connexion QQ comme exemple pour présenter comment obtenir l'autorisation de l'utilisateur, obtenir des jetons d'accès, vérifier les enregistrements des utilisateurs et d'autres fonctions. L'utilisation de Beego et OAuth2 pour implémenter la fonction de connexion tierce peut fournir aux utilisateurs une méthode de connexion plus pratique, plus rapide et plus sûre, et peut également offrir aux développeurs une expérience de développement plus efficace et meilleure. #🎜🎜#
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!