Maison >développement back-end >Golang >Implémenter la connexion tierce à l'aide de Beego et OAuth2

Implémenter la connexion tierce à l'aide de Beego et OAuth2

王林
王林original
2023-06-22 20:34:371259parcourir

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

  1. Créer un projet Beego

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
  1. Installer les bibliothèques nécessaires

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/beegogithub.com/astaxie/beego/orm,可以使用以下命令安装:

go get github.com/astaxie/beego
go get github.com/astaxie/beego/orm
  1. 创建数据库

我们需要创建一个数据库,以便存储用户信息和第三方登录信息。可以使用 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、微信、微博等大型社交平台。我们以 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

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

    # 🎜🎜#Créer une base de données
    1. Nous devons créer une base de données pour stocker les informations des utilisateurs et les informations de connexion de tiers. Vous pouvez utiliser des bases de données MySQL ou PostgreSQL. Dans cet article, nous utilisons la base de données MySQL. Voici l'instruction SQL permettant de créer la table utilisateur et la table de connexion tierce :
    2. rrreee
        Configuration de la connexion tierce

        #🎜 🎜#Nous devons utiliser une connexion tierce pour l'authentification. Il existe actuellement diverses méthodes de connexion tierces sur le marché, notamment de grandes plateformes sociales telles que QQ, WeChat et Weibo. Prenons l'exemple de la connexion QQ pour expliquer.

        Tout d'abord, nous devons enregistrer une application sur la plateforme ouverte Internet QQ (https://connect.qq.com/) pour obtenir l'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ètre state 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!

    Déclaration:
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn