Heim >Backend-Entwicklung >Golang >Implementieren Sie die Anmeldung von Drittanbietern mit Beego und OAuth2

Implementieren Sie die Anmeldung von Drittanbietern mit Beego und OAuth2

王林
王林Original
2023-06-22 20:34:371259Durchsuche

Mit der rasanten Entwicklung des Internets ist die Anmeldung über Dritte zu einem unverzichtbaren Bestandteil des Online-Lebens geworden. Die Drittanbieter-Anmeldung bietet Benutzern eine bequemere, schnellere und sicherere Anmeldemethode und ist beliebter als die herkömmliche Registrierungs-Anmeldemethode. Zu den Anmeldungen von Drittanbietern auf dem Markt gehören derzeit hauptsächlich große soziale Plattformen wie QQ, WeChat und Weibo. Wie kann die Drittanbieter-Anmeldefunktion schnell implementiert werden? In diesem Artikel wird erläutert, wie Sie Beego und OAuth2 verwenden, um Anmeldefunktionen von Drittanbietern zu implementieren.

1. Einführung in Beego

Beego ist ein Open-Source-Framework für die schnelle Go-Programmierung. Es ist äußerst flexibel und erweiterbar und bietet eine große Anzahl an Tools und Bibliotheken. Beego kann Entwicklern beim schnellen Erstellen von Webanwendungen helfen und bietet einige wichtige Funktionen wie automatische Routenverwaltung, Vorlagensystem und statische Dateibereitstellung.

2. Einführung in das OAuth2-Protokoll

OAuth2 ist ein Autorisierungs-Framework-Protokoll, das es Benutzern ermöglicht, andere Anwendungen für den Zugriff auf Dienste von Drittanbietern zu autorisieren, ohne Passwörter und andere vertrauliche Informationen an Dritte weiterzugeben. Dieses Protokoll definiert vier Rollen: Ressourcenbesitzer, Ressourcenserver, Client und Authentifizierungsserver. Unter ihnen bezieht sich der Ressourcenbesitzer auf den Benutzer mit Zugriffsrechten, der Ressourcenserver bezieht sich auf den Server, der die Informationsressourcen hostet, der Client bezieht sich auf das Softwareprogramm, das Zugriff auf geschützte Ressourcen anfordert, und der Authentifizierungsserver bezieht sich auf die Überprüfung des Clients Identität und Autorisierung des Zugriffs auf geschützte Ressourcendienste.

3. Verwenden Sie Beego und OAuth2, um die Anmeldung eines Drittanbieters zu implementieren.

  1. Beego-Projekt erstellen. Zuerst müssen wir ein Beego-Projekt für die lokale Entwicklung und Tests erstellen. Verwenden Sie den folgenden Befehl (Beego muss zuerst installiert werden):
  2. bee new thirdpartylogin

Notwendige Bibliotheken installieren

  1. Wir müssen einige notwendige Bibliotheken installieren, darunter github.com/astaxie/beego und github.com/astaxie/beego/orm, das mit dem folgenden Befehl installiert werden kann:
  2. go get github.com/astaxie/beego
    go get github.com/astaxie/beego/orm
      Datenbank erstellen

      github.com/astaxie/beegogithub.com/astaxie/beego/orm,可以使用以下命令安装:

      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. 创建数据库

      我们需要创建一个数据库,以便存储用户信息和第三方登录信息。可以使用 MySQL 或 PostgreSQL 数据库。在本文中,我们使用 MySQL 数据库。以下是创建用户表和第三方登录表的 SQL 语句:

      func QQLogin(c *beego.Controller) {
          var state = c.GetString("state")
          var oauth = conf.GetQQOAuthConfig(state)
      
          authURL := oauth.AuthCodeURL(state)
          c.Redirect(http.StatusTemporaryRedirect, authURL)
      } 
      1. 配置第三方登录

      我们需要使用第三方登录进行认证。目前市面上有多种第三方登录方式,包括 QQ、微信、微博等大型社交平台。我们以 QQ 登录为例进行讲解。

      首先,我们需要在 QQ 互联开放平台(https://connect.qq.com/)注册一个应用程序,以获得App IDApp Key。其次,我们需要在 Beego 项目中添加如下代码,获取用户授权:

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

      在以上代码中,state参数用于识别用户请求,oauth对象包含了 QQ 登录所需的配置信息。我们使用AuthCodeURL方法生成授权地址,并将用户重定向至授权页面。

      接着,我们需要添加如下代码,接收 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)
          })
      }

      在以上代码中,我们使用Exchange方法获取访问令牌,使用fetchQQUserInfo方法获取 QQ 用户信息,其中openid

      Wir müssen eine Datenbank erstellen, um Benutzerinformationen zu speichern Anmeldeinformationen Dritter. Sie können MySQL- oder PostgreSQL-Datenbanken verwenden. In diesem Artikel verwenden wir die MySQL-Datenbank. Das Folgende ist die SQL-Anweisung zum Erstellen der Benutzertabelle und der Drittanbieter-Anmeldetabelle:
        rrreee
        1. Drittanbieter-Anmeldung konfigurieren

        Wir müssen die Drittanbieter-Anmeldung zur Authentifizierung verwenden. Derzeit gibt es eine Vielzahl von Anmeldemethoden von Drittanbietern auf dem Markt, darunter große soziale Plattformen wie QQ, WeChat und Weibo. Nehmen wir zur Erläuterung die QQ-Anmeldung als Beispiel.

        Zuerst müssen wir eine Anwendung auf der QQ Internet Open Platform (https://connect.qq.com/) registrieren, um App ID und App Key zu erhalten. Zweitens müssen wir dem Beego-Projekt den folgenden Code hinzufügen, um die Benutzerautorisierung zu erhalten:

        rrreee

        Im obigen Code wird der Parameter state verwendet, um die Benutzeranforderung zu identifizieren, und der Parameter oauth Das -Objekt enthält Konfigurationsinformationen, die für die QQ-Anmeldung erforderlich sind. Wir verwenden die Methode AuthCodeURL, um die Autorisierungsadresse zu generieren und den Benutzer zur Autorisierungsseite weiterzuleiten.

        Als nächstes müssen wir den folgenden Code hinzufügen, um die QQ-Rückrufanforderung zu empfangen und das Zugriffstoken zu erhalten:

        rrreee🎜Im obigen Code verwenden wir die Methode Exchange, um das Zugriffstoken zu erhalten und zu verwenden fetchQQUserInfo-Methode ruft QQ-Benutzerinformationen ab, wobei <code>openid zur eindeutigen Identifizierung des QQ-Benutzers verwendet wird. Als Nächstes prüfen wir, ob der QQ-Benutzerdatensatz in der Datenbank vorhanden ist. Wenn ja, aktualisieren wir dessen Zugriffstoken. Andernfalls erstellen wir einen neuen Kontodatensatz. 🎜🎜🎜Authentifizierung und Autorisierung🎜🎜🎜Abschließend müssen wir die Authentifizierungs- und Autorisierungsfunktion hinzufügen, um sicherzustellen, dass sich der Benutzer angemeldet und über einen Dritten autorisiert hat. 🎜rrreee🎜Im obigen Code prüfen wir, ob die Benutzer-ID in der Sitzung vorhanden ist. Wenn nicht, leiten wir zur Anmeldeseite weiter, andernfalls fahren wir mit der Verarbeitung der Anfrage fort. 🎜🎜4. Zusammenfassung🎜🎜In diesem Artikel wird beschrieben, wie Sie Beego und OAuth2 verwenden, um die Anmeldung eines Drittanbieters zu implementieren. Wir verwenden die QQ-Anmeldung als Beispiel, um vorzustellen, wie Sie eine Benutzerautorisierung erhalten, Zugriffstoken erhalten, Benutzerdatensätze überprüfen und andere Funktionen ausführen. Die Verwendung von Beego und OAuth2 zur Implementierung der Anmeldefunktion von Drittanbietern kann Benutzern eine bequemere, schnellere und sicherere Anmeldemethode bieten und Entwicklern auch eine effizientere und bessere Entwicklungserfahrung bieten. 🎜

    Das obige ist der detaillierte Inhalt vonImplementieren Sie die Anmeldung von Drittanbietern mit Beego und OAuth2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn