欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

    1. 
          
          

      golang實(shí)現(xiàn)單點(diǎn)登錄系統(tǒng)(go-sso)

       更新時(shí)間:2020年06月12日 09:48:29   作者:guyan0319  
      這篇文章主要介紹了golang實(shí)現(xiàn)單點(diǎn)登錄系統(tǒng)(go-sso),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

      這是一個(gè)基于Go語(yǔ)言開發(fā)的單點(diǎn)登錄系統(tǒng),實(shí)現(xiàn)手機(jī)號(hào)注冊(cè)、手機(jī)號(hào)+驗(yàn)證碼登錄、手機(jī)號(hào)+密碼登錄、賬號(hào)登出等功能,用戶認(rèn)證采用cookie和jwt兩種方式。收發(fā)短信相關(guān)方法已提供,僅需根據(jù)短信通道提供商提供的接口做相應(yīng)的參數(shù)配置即可使用。

      環(huán)境介紹

      golang語(yǔ)言:go1.13.3+ 、

      數(shù)據(jù)庫(kù):mysql5.7

      緩存:redis3.0

      項(xiàng)目地址

      https://github.com/guyan0319/ ...

      依賴包:

      github.com/dgrijalva/jwt-go
      github.com/gin-gonic/gin
      github.com/go-xorm/xorm
      github.com/go-sql-driver/mysql

      注意:項(xiàng)目代碼依賴管理工具采用的go-modules,需要了解的移步https://github.com/guyan0319/...

      數(shù)據(jù)請(qǐng)求類型

      Content-Type: application/json

      注:這個(gè)一定要注意,其他類型服務(wù)端不識(shí)別。

      快速開始

      1、數(shù)據(jù)庫(kù)

      sql文件在data目錄下,新建數(shù)據(jù)庫(kù)名,通過mysql管理工具或登錄mysql數(shù)據(jù)庫(kù)直接創(chuàng)建數(shù)據(jù)庫(kù)名,并導(dǎo)入ssodb.sql文件到數(shù)據(jù)庫(kù),完成數(shù)據(jù)庫(kù)結(jié)構(gòu)創(chuàng)建。具體方法這里不再贅述。

      2、配置mysql、redis

      配置文件在conf目錄下,修改 mysql.go、redis.go配置成你自己的實(shí)際環(huán)境。

      3、啟動(dòng)

      go run main.go

      4、測(cè)試

      我們可以采用postman等工具,進(jìn)行客戶端瀏覽器模擬操作,也可以通過curl實(shí)現(xiàn)。

      這里以curl工具為例:

      注冊(cè)手機(jī)號(hào)

      $ curl -X POST "http://127.0.0.1:8282/signup/mobile" -i -d '
      {
      "mobile":"13522227564","passwd":"123456","code": "111111"
      }
      '

      結(jié)果

      % Total 
      % Received 
      % Xferd Average Speed Time Time Time Current
       Dload Upload Total Spent Left Speed
      100 86 100 28 100 58 1750 3625 --:--:-- --:--:-- --:--:-- 86000HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8
      Date: Tue, 09 Jun 2020 08:59:36 GMT
      Content-Length: 28
      
      {
      "code":200,"msg":"success"
      }

      注:code參數(shù)值只要隨意6位數(shù)即可,示例中服務(wù)端并沒有配置短信通道,驗(yàn)證code代碼已注釋。

      手機(jī)號(hào)+密碼 登錄

      $ curl -X POST "http://127.0.0.1:8282/login" -i -d '
      {
      "mobile":"13522227564","passwd":"123456"
      }
      '

      結(jié)果

      % Total 
       % Received 
      % Xferd Average Speed Time Time Time Current
       Dload Upload Total Spent Left Speed
      100 69 100 28 100 41 451 661 --:--:-- --:--:-- --:--:-- 1112HTTP/1.1 200 OK
      Access_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsImV4cCI6MTU5MTg1ODIwMX0.OMpRhdX2wXm1BuRmeaZtSH7L3skXhNhYc0YYUTQf7WI
      Content-Type: application/json; charset=utf-8
      Refresh_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsImV4cCI6MTU5MTg2MDAwMX0.Hglo9i8pxFGcRcvMw8mUvXlT2JLrHSC6ocQqJseknq8
      Set-Cookie: Access_Token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsImV4cCI6MTU5MTg1ODIwMX0.OMpRhdX2wXm1BuRmeaZtSH7L3skXhNhYc0YYUTQf7WI; Path=/; Max-Age=86400; HttpOnly
      Set-Cookie: Refresh_Token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsImV4cCI6MTU5MTg2MDAwMX0.Hglo9i8pxFGcRcvMw8mUvXlT2JLrHSC6ocQqJseknq8; Path=/; Max-Age=86400; HttpOnly
      Set-Cookie: UserId=1; Path=/; Max-Age=86400; HttpOnly
      Date: Wed, 10 Jun 2020 06:50:01 GMT
      Content-Length: 28
      
      {
      "code":200,"msg":"success"
      }

      手機(jī)號(hào)+驗(yàn)證碼登錄

      $ curl -X POST "http://127.0.0.1:8282/login/mobile" -i -d '
      {
      "mobile":"13522227564","code":"123456"
      }
      '

      結(jié)果

      % Total % Received % Xferd Average Speed Time Time Time Current
       Dload Upload Total Spent Left Speed
      100 68 100 28 100 40 163 233 --:--:-- --:--:-- --:--:-- 397HTTP/1.1 200 OK
      Access_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsImV4cCI6MTU5MTk1NDIxOX0.FK-6ofW-ni8E7BcQ1tH9Z4vzQHDBbnyIcDZLEytRrfQ
      Content-Type: application/json; charset=utf-8
      Refresh_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsImV4cCI6MTU5MTk1NjAxOX0.gJzzho2gP1nNrkUKdtvMh0R3jGFZpA-ku0dWDvLftu0
      Set-Cookie: Access_Token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsImV4cCI6MTU5MTk1NDIxOX0.FK-6ofW-ni8E7BcQ1tH9Z4vzQHDBbnyIcDZLEytRrfQ; Path=/; Max-Age=86400; HttpOnly
      Set-Cookie: Refresh_Token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsImV4cCI6MTU5MTk1NjAxOX0.gJzzho2gP1nNrkUKdtvMh0R3jGFZpA-ku0dWDvLftu0; Path=/; Max-Age=86400; HttpOnly
      Set-Cookie: UserId=1; Path=/; Max-Age=86400; HttpOnly
      Date: Thu, 11 Jun 2020 09:30:19 GMT
      Content-Length: 28
      
      {
      "code":200,"msg":"success"
      }

      獲取用戶信息

      使用上面登錄獲取的Access_Token獲取用戶信息。

      $ curl "

      結(jié)果

      % Total  % Received % Xferd Average Speed  Time  Time   Time Current
                       Dload Upload  Total  Spent  Left Speed
      100  73 100  73  0   0 73000   0 --:--:-- --:--:-- --:--:-- 73000{"code":200,"data":
      {
      "id":1,"name":"","email":"","mobile":"135****27564"
      }
      }

      查看手機(jī)號(hào)是否存在

      $ curl -X POST "http://127.0.0.1:8282/signup/mobile/exist" -i -d '
      {"mobile":"13522227564"
      }'

      結(jié)果

      % Total % Received % Xferd Average Speed Time Time  Time Current
               Dload Upload Total Spent Left Speed
      100 61 100 37 100 24 37000 24000 --:--:-- --:--:-- --:--:-- 61000HTTP/1.1 200 OK
      Content-Type: application/json; charset=utf-8
      Date: Wed, 10 Jun 2020 07:40:50 GMT
      Content-Length: 37
      
      {
      "code":200,"data":
      {
      "is_exist":true
      }}

      access token 續(xù)期

      $ curl -X POST "

      結(jié)果:

      % Total % Received % Xferd Average Speed Time Time  Time Current
               Dload Upload Total Spent Left Speed
      100 28 100 28 0  0 595  0 --:--:-- --:--:-- --:--:-- 595HTTP/1.1 200 OK
      Access_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsImV4cCI6MTU5MTk1NTEzMn0.KCNVQ39HoMZFG-Xl0xwDrVdhQO_w4-tDxWY0ebyhfyk
      Content-Type: application/json; charset=utf-8
      Refresh_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsImV4cCI6MTU5MTk1NjkzMn0.XijN8ZjPbZkhjJB33igti3dSm1tfd2kp_iNRtPqpwyM
      Set-Cookie: Access_Token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsImV4cCI6MTU5MTk1NTEzMn0.KCNVQ39HoMZFG-Xl0xwDrVdhQO_w4-tDxWY0ebyhfyk; Path=/; Max-Age=86400; HttpOnly
      Set-Cookie: Refresh_Token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsImV4cCI6MTU5MTk1NjkzMn0.XijN8ZjPbZkhjJB33igti3dSm1tfd2kp_iNRtPqpwyM; Path=/; Max-Age=86400; HttpOnly
      Date: Thu, 11 Jun 2020 09:45:32 GMT
      Content-Length: 28
      {
      "code":400,"msg":"success"
      }
      

      登出系統(tǒng)

      $ curl -X POST "

      結(jié)果

      % Total % Received % Xferd Average Speed Time Time  Time Current
               Dload Upload Total Spent Left Speed
      100 28 100 28 0  0 28000  0 --:--:-- --:--:-- --:--:-- 28000{"code":200,"msg":"success"
      }

      小結(jié)

      僅使用jwt實(shí)現(xiàn)單點(diǎn)登錄會(huì)遇到兩個(gè)問題

      • 用戶無法主動(dòng)登出,即服務(wù)端發(fā)出token后,無法主動(dòng)銷毀token,用戶還可以用通過token訪問系統(tǒng),本項(xiàng)目增加了緩存登出用戶token到黑名單的方式,變相實(shí)現(xiàn)登出。
      • token續(xù)期問題,access_token攜帶有效期,有效期過了無法自動(dòng)續(xù)期。本項(xiàng)目提供了續(xù)期接口(renewal),服務(wù)端在生成access_token同時(shí)還會(huì)生成refresh_token(有效期比access_token長(zhǎng)),用戶可以通過有效的refresh_token和access_token訪問renewal接口重新獲取新的refresh_token和access_token。

      到此這篇關(guān)于golang實(shí)現(xiàn)單點(diǎn)登錄系統(tǒng)(go-sso)的文章就介紹到這了,更多相關(guān)golang單點(diǎn)登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

      相關(guān)文章

      • Go語(yǔ)言排序與接口實(shí)例分析

        Go語(yǔ)言排序與接口實(shí)例分析

        這篇文章主要介紹了Go語(yǔ)言排序與接口,實(shí)例分析了排序與接口的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
        2015-02-02
      • Go語(yǔ)言結(jié)構(gòu)體定義和使用方法

        Go語(yǔ)言結(jié)構(gòu)體定義和使用方法

        這篇文章主要介紹了Go語(yǔ)言結(jié)構(gòu)體定義和使用方法,以實(shí)例形式分析了Go語(yǔ)言中結(jié)構(gòu)體的定義和使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
        2015-02-02
      • Go語(yǔ)言中io.Reader和io.Writer的詳解與實(shí)現(xiàn)

        Go語(yǔ)言中io.Reader和io.Writer的詳解與實(shí)現(xiàn)

        在Go語(yǔ)言的實(shí)際編程中,幾乎所有的數(shù)據(jù)結(jié)構(gòu)都圍繞接口展開,接口是Go語(yǔ)言中所有數(shù)據(jù)結(jié)構(gòu)的核心。在使用Go語(yǔ)言的過程中,無論你是實(shí)現(xiàn)web應(yīng)用程序,還是控制臺(tái)輸入輸出,又或者是網(wǎng)絡(luò)操作,不可避免的會(huì)遇到IO操作,使用到io.Reader和io.Writer接口。下面來詳細(xì)看看。
        2016-09-09
      • Go select 死鎖的一個(gè)細(xì)節(jié)

        Go select 死鎖的一個(gè)細(xì)節(jié)

        這篇文章主要給大家分享的是Go select 死鎖的一個(gè)細(xì)節(jié),文章先是對(duì)主題提出問題,然后展開內(nèi)容,感興趣的小伙伴可以借鑒一下,希望對(duì)你有所幫助
        2021-10-10
      • go強(qiáng)制類型轉(zhuǎn)換type(a)以及范圍引起的數(shù)據(jù)差異

        go強(qiáng)制類型轉(zhuǎn)換type(a)以及范圍引起的數(shù)據(jù)差異

        這篇文章主要為大家介紹了go強(qiáng)制類型轉(zhuǎn)換type(a)以及范圍引起的數(shù)據(jù)差異,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
        2023-10-10
      • golang 字符串比較是否相等的方法示例

        golang 字符串比較是否相等的方法示例

        這篇文章主要介紹了golang 字符串比較是否相等的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
        2021-02-02
      • 一個(gè)Pod調(diào)度失敗后重新觸發(fā)調(diào)度的所有情況分析

        一個(gè)Pod調(diào)度失敗后重新觸發(fā)調(diào)度的所有情況分析

        這篇文章主要為大家介紹了一個(gè)Pod調(diào)度失敗后重新觸發(fā)調(diào)度的所有情況分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
        2023-04-04
      • 深入探討Go語(yǔ)言中的map是否是并發(fā)安全以及解決方法

        深入探討Go語(yǔ)言中的map是否是并發(fā)安全以及解決方法

        這篇文章主要來和大家探討?Go?語(yǔ)言中的?map?是否是并發(fā)安全的,并提供三種方案來解決并發(fā)問題,文中的示例代碼講解詳細(xì),需要的可以參考一下
        2023-05-05
      • go語(yǔ)言編程二維碼生成及識(shí)別

        go語(yǔ)言編程二維碼生成及識(shí)別

        這篇文章主要為大家介紹了go語(yǔ)言編程二維碼的生成及識(shí)別示例演示,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
        2022-04-04
      • Go語(yǔ)言通道之緩沖通道

        Go語(yǔ)言通道之緩沖通道

        這篇文章介紹了Go語(yǔ)言通道之緩沖通道,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
        2022-07-07

      最新評(píng)論