2단계 인증은 네트워크 보안의 필수 기능이 되었으며, 이는 계정 보안을 크게 강화할 수 있습니다. 이 기사에서는 Gin 프레임워크를 사용하여 2단계 인증 기능을 구현하는 방법을 소개합니다.
Gin 프레임워크는 고성능, 사용 용이성 및 유연성의 장점을 지닌 경량 웹 프레임워크입니다. RESTful API, 미들웨어, 라우팅 그룹, 템플릿 렌더링 및 기타 기능을 지원하고 좋은 문서와 예제를 갖추고 있어 가장 인기 있는 Go 언어 웹 프레임워크 중 하나입니다.
시작하기 전에 Go 언어 개발 환경을 설치하고 해당 GOPATH 및 PATH 환경 변수를 구성했는지 확인하세요.
먼저 새로운 Gin 프로젝트를 생성해야 합니다. 명령줄에 다음 명령을 입력하세요:
$ mkdir gin-auth $ cd gin-auth $ go mod init gin-auth
다음으로 Gin 프레임워크와 기타 종속성 패키지를 설치해야 합니다. 콘솔에 다음 명령을 입력하세요.
$ go get -u github.com/gin-gonic/gin $ go get -u github.com/gin-contrib/sessions $ go get -u github.com/google/uuid
-
gin
은 Gin 프레임워크 자체입니다. -
gin-contrib/sessions
是Gin框架的Session中间件,用于处理Session相关任务。 -
uuid
是Google开发的用于生成UUID的Go语言库。在本文中用于生成二次认证验证码。
gin
是Gin框架本身。现在,我们可以开始实现我们的双因素认证功能了。
我们首先需要编写登录页面和处理登录请求的代码,如下所示:
package main import ( "net/http" "github.com/gin-contrib/sessions" "github.com/gin-gonic/gin" ) func main() { router := gin.Default() // 使用sessions中间件 store := sessions.NewCookieStore([]byte("secret")) router.Use(sessions.Sessions("mysession", store)) router.GET("/", func(c *gin.Context) { c.HTML(http.StatusOK, "login.html", nil) }) router.POST("/", func(c *gin.Context) { username := c.PostForm("username") password := c.PostForm("password") // TODO: 验证用户名和密码是否正确 // 将用户名保存到Session中 session := sessions.Default(c) session.Set("username", username) session.Save() c.Redirect(http.StatusFound, "/second-factor") }) router.Run(":8080") }
上面的代码中,我们使用Gin框架的gin.Default()
函数创建一个基本的路由器。然后,我们使用sessions.NewCookieStore
函数创建了一个存储Session的Cookie Store,用于储存用户的Session信息。我们在路由器中间件中使用了Session中间件,并将其命名为mysession
。
在首页路由中,我们通过c.HTML
函数将渲染出登录页面。在登录路由中,我们获取用户输入的用户名和密码,然后在稍后实现的功能中验证它们。如果验证成功,我们将用户名保存在Session中,并将用户重定向到第二种认证页面。
接下来,我们将编写第二次认证的页面和功能。在这里,我们通过Session验证是否已经登录,如果登录,则显示二次认证页面并生成一个随机的6位数字验证码。该验证码将保存在Session中,并将通过短信、邮件或安全令牌等方式发送给用户。
// 定义一个中间件,用于检查Session中是否保存了该用户的用户名 func AuthRequired() gin.HandlerFunc { return func(c *gin.Context) { session := sessions.Default(c) username := session.Get("username") if username == nil { c.Redirect(http.StatusFound, "/") return } c.Next() } } func generateCode() string { code := uuid.New().String() code = strings.ReplaceAll(code, "-", "") code = code[:6] return code } func sendCode(username string, code string) error { // TODO: 将验证码发送给用户 return nil } func main() { router := gin.Default() // ... router.GET("/second-factor", AuthRequired(), func(c *gin.Context) { session := sessions.Default(c) username := session.Get("username").(string) code := generateCode() // 将二次认证验证码保存到Session session.Set("second-factor-code", code) session.Save() // 发送二次认证验证码 err := sendCode(username, code) if err != nil { c.String(http.StatusInternalServerError, "发送二次认证验证码失败") } // 渲染二次认证视图 c.HTML(http.StatusOK, "second-factor.html", nil) }) router.POST("/second-factor", AuthRequired(), func(c *gin.Context) { session := sessions.Default(c) code := session.Get("second-factor-code").(string) inputCode := c.PostForm("code") // 验证二次认证验证码是否正确 if code != inputCode { c.String(http.StatusBadRequest, "验证码不正确") return } c.Redirect(http.StatusFound, "/dashboard") }) router.Run(":8080") }
在上面的代码中,我们定义了一个名为AuthRequired
的中间件,用于检查Session中是否存在已登录的用户。在我们的第二个路由中,使用该中间件,如果Session中未找到已登录的用户,则将用户重定向到登录页面。
我们使用一个名为generateCode
的函数来生成6位数字的验证码,并使用sendCode
gin-contrib/sessions
는 세션 관련 작업을 처리하는 데 사용되는 Gin 프레임워크의 세션 미들웨어입니다.
uuid
는 UUID 생성을 위해 Google에서 개발한 Go 언어 라이브러리입니다. 이 문서에서는 2단계 인증 확인 코드를 생성하는 데 사용됩니다. 이제 이중 인증 기능 구현을 시작할 수 있습니다.
먼저 아래와 같이 로그인 페이지와 로그인 요청을 처리하는 코드를 작성해야 합니다.
代码已经完成了,现在可以创建一些模板文件来呈现登录、二次验证和控制面板页面了。下面是示例模板文件,你可以根据自身需求对其进行修改。
위 코드에서는 Gin 프레임워크의
gin.Default()
함수를 사용하여 다음을 수행합니다. 기본 라우터를 만듭니다. 그런 다음 sessions.NewCookieStore
함수를 사용하여 사용자의 세션 정보를 저장하는 데 사용되는 세션을 저장하는 쿠키 저장소를 만듭니다. 라우터 미들웨어에 세션 미들웨어를 사용하고 이름을 mysession
으로 지정했습니다. 홈 페이지 라우팅에서는
c.HTML
기능을 사용하여 로그인 페이지를 렌더링합니다. 로그인 경로에서는 사용자가 입력한 사용자 이름과 비밀번호를 얻은 다음 나중에 구현하는 함수에서 이를 검증합니다. 인증이 성공하면 세션에 사용자 이름을 저장하고 사용자를 두 번째 인증 페이지로 리디렉션합니다.
다음으로 2차 인증을 위한 페이지와 기능을 작성하겠습니다. 여기서는 Session을 통해 로그인 여부를 확인합니다. 로그인을 하면 2차 인증 페이지가 표시되며 임의의 6자리 인증코드가 생성됩니다. 인증 코드는 세션에 저장되며 SMS, 이메일 또는 보안 토큰을 통해 사용자에게 전송됩니다.
<meta charset="UTF-8"> <title>Login</title>
위 코드에서는 세션에 로그인한 사용자가 있는지 확인하기 위해 AuthRequired
라는 미들웨어를 정의했습니다. 두 번째 경로에서는 로그인한 사용자를 세션에서 찾을 수 없는 경우 이 미들웨어를 사용하여 사용자를 로그인 페이지로 리디렉션합니다.
generateCode
라는 함수를 사용하여 6자리 인증코드를 생성하고, sendCode
함수를 사용하여 사용자에게 인증코드를 보냅니다. 실제 애플리케이션에서는 이 인증 코드를 SMS, 이메일 또는 보안 토큰을 사용하여 전송할 수 있습니다.
POST 요청과 두 번째 경로의 토큰을 사용하여 사용자의 2단계 인증 코드가 올바른지 확인합니다. 인증코드가 올바르면 사용자는 제어판 페이지로 리디렉션됩니다.
<form method="post" action="/"> <label> 用户名: <input type="text" name="username" /> </label> <br /> <label> 密码: <input type="password" name="password" /> </label> <br /> <button type="submit">登录</button> </form>
<meta charset="UTF-8"> <title>Second Factor Authentication</title>
< ;body>
<form method="post" action="/second-factor"> <p> 请验证您的身份。 </p> <p> 一个6位数字的验证码已经发送到您的邮件或手机上。 <br /> 请输入该验证码以完成二次认证: </p> <label> 验证码: <input type="text" name="code" /> </label> <br /> <button type="submit">验证</button> </form>
위 내용은 Gin 프레임워크를 사용하여 2단계 인증 기능 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

golangisidealferperperferferferferformance-criticalapplications 및 concurrentprogramming, whilepythonexcelsindatascience, 빠른 프로토 타입, 및 범위

Golang은 Goroutine 및 Channel을 통해 효율적인 동시성을 달성합니다. 1. Goroutine은 가벼운 스레드이며 GO 키워드로 시작합니다. 2. 채널은 경주 조건을 피하기 위해 고루틴 간의 안전한 통신에 사용됩니다. 3. 사용 예제는 기본 및 고급 사용법을 보여줍니다. 4. 일반적인 오류에는 교착 상태와 데이터 경쟁이 포함되며 Gorun-Race가 감지 할 수 있습니다. 5. 성능 최적화는 채널 사용을 줄이고, 고 루틴 수를 합리적으로 설정하고, sync.pool을 사용하여 메모리를 관리하는 것을 제안합니다.

Golang은 시스템 프로그래밍 및 높은 동시성 응용 프로그램에 더 적합한 반면 Python은 데이터 과학 및 빠른 개발에 더 적합합니다. 1) Golang은 Google에 의해 개발되어 정적으로 입력하여 단순성과 효율성을 강조하며 동시성 시나리오에 적합합니다. 2) Python은 Guidovan Rossum, 동적으로 입력, 간결한 구문, 광범위한 응용 프로그램, 초보자 및 데이터 처리에 적합합니다.

Golang은 성능과 확장 성 측면에서 Python보다 낫습니다. 1) Golang의 컴파일 유형 특성과 효율적인 동시성 모델은 높은 동시성 시나리오에서 잘 수행합니다. 2) 해석 된 언어로서 파이썬은 천천히 실행되지만 Cython과 같은 도구를 통해 성능을 최적화 할 수 있습니다.

Go Language는 동시 프로그래밍, 성능, 학습 곡선 등의 고유 한 장점을 가지고 있습니다. 1. 동시 프로그래밍은 가볍고 효율적인 Goroutine 및 채널을 통해 실현됩니다. 2. 컴파일 속도는 빠르며 작동 속도는 작동 성능이 C 언어의 성능에 가깝습니다. 3. 문법은 간결하고 학습 곡선은 매끄럽고 생태계는 풍부합니다.

Golang과 Python의 주요 차이점은 동시성 모델, 유형 시스템, 성능 및 실행 속도입니다. 1. Golang은 동시 작업에 적합한 CSP 모델을 사용합니다. Python은 I/O 집약적 인 작업에 적합한 멀티 스레딩 및 Gil에 의존합니다. 2. Golang은 정적 유형이며 Python은 동적 유형입니다. 3. Golang 컴파일 된 언어 실행 속도는 빠르며 파이썬 해석 언어 개발은 빠릅니다.

Golang은 일반적으로 C보다 느리지 만 Golang은 동시 프로그래밍 및 개발 효율에 더 많은 장점이 있습니다. 1) Golang의 쓰레기 수집 및 동시성 모델은 높은 동시 시나리오에서 잘 수행합니다. 2) C는 수동 메모리 관리 및 하드웨어 최적화를 통해 더 높은 성능을 얻지 만 개발 복잡성이 높습니다.

Golang은 클라우드 컴퓨팅 및 DevOps에서 널리 사용되며 장점은 단순성, 효율성 및 동시 프로그래밍 기능에 있습니다. 1) 클라우드 컴퓨팅에서 Golang은 Goroutine 및 채널 메커니즘을 통해 동시 요청을 효율적으로 처리합니다. 2) DevOps에서 Golang의 빠른 편집 및 크로스 플랫폼 기능이 자동화 도구의 첫 번째 선택입니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

드림위버 CS6
시각적 웹 개발 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경
