html登录界面设计代码_最简洁实现Github登录的JS代码示例

本文源码地址:https://github.com/Spring-Security-China/oauth2-client-login-js-github

大纲

  • 概述

  • 实现思路分析

  • 在Github官网注册OAuth2应用

  • 代码实现

  • 运行与演示

  • 总结

概述

为了达到“最简洁”这个目标,大家是不是希望可以使用纯前端的方式,只一个html在浏览器中运行,就完成Github第三方登录功能呢?只能说理想很丰满,现实很骨感,因为OAuth2协议的限制和一些安全性需求,我们仍然需要前端和后端相互配合才可以实现Github登录。

Github的第三方登录功能背后的技术实际上是OAuth2协议,OAuth2协议本身有一定的复杂性,大家可以参考公众号文章《OAuth2核心协议概览》做一些简单理解。

923ac43f5ace98ec13302899441c1918.png

我们知道OAuth2协议中有OAuth2授权服务器、资源服务器、OAuth2客户端和用户代理这四个角色。与其他很多互联网平台如微信公众平台、Google开放平台、OKTA等等一样,Github也同时是OAuth2授权服务器和资源服务器,浏览器是用户代理。而本文的代码示例,实际上就是一个OAuth2客户端。

本文通过几行js代码,在不需要大家了解OAuth2协议细节的情况下,就可以实现Github第三方登录的功能,同时让大家快速而直观地感受下OAuth2核心协议。

实现思路分析

如何接入Github登录?看Github官网:https://developer.github.com/apps/building-oauth-apps 。

获取token需要两个步骤:

  1. 获取code:浏览器访问 https://github.com/login/oauth/authorize 同时传递回调地址等参数

  2. 使用code交换token:携带code发起POST请求调用 https://github.com/login/oauth/access_token

是不是感觉很简单,我们直接写个html页面,在页面中写两个方法就解决了?就像这样:

function getCode(){

window.location.href = "https://github.com/login/oauth/authorize"+...

}

function getToken(code){

...POST "https://github.com/login/oauth/access_token" 获取token...

}

但这种方案是行不通的。因为首先“/oauth/access_token”接口不允许跨源访问(关于什么是跨源,可以参考《彻底理解浏览器同源策略SOP》和《彻底掌握CORS跨源资源共享》两篇文章),也就是说浏览器调用这个接口后无法获取响应。其次token暴露在浏览器端会增加token泄露的风险。实际上根据OAuth2协议,通过code交换token的这个接口流程属于后端流程(“back-end flow”),是后端调用后端的流程类型。

那么只好增加复杂性,引入后端。实现一个最简洁的JS前端+JS后端的Github登录代码示例。逻辑流程图如下:

ca2b6490d2c8508e1e0e80ff29287085.png

在Github官网注册OAuth2应用

首先需要在Github官网注册一个新的OAuth2应用,地址是:https://github.com/settings/applications/new

3fb8bca41fa91edce9adaa2085d3cd29.png

  1. Application Name:必填,应用名称, 设置为: oauth2-client-login-js-github

  2. Homepage URL: 必填,应用主页,设置为 http://localhost:8080

  3. Application description: 选填,应用的说明,置空即可。

  4. Authorization callback URL: 必填,OAuth认证的重定向地址,本地开发环节可设置为 http://localhost:8080 。

当用户通过浏览器成功登录Github,并且用户在批准页(Approva Page)授权允许注册的客户端应用访问自己的用户数据后,Github会将授权码(code)通过重定向方式传递给客户端应用。

填写无误后,点击 Registerappcation 按钮,注册成功后,获取到 clientIdclientSecret

代码实现

源码地址:https://github.com/Spring-Security-China/oauth2-client-login-js-github

7a6f9ed74a3275c877610bc8c986fc30.png

  • server.js是nodejs实现的后端

  • loginGithub.html是普通html模拟的前端

前端示例代码loginGithub.html

...略

onclick="handleLoginGithub()">使用Github登录

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 用Vue写一个用户注册的简单网页附带源代码可以使用Vue CLI来创建一个新的Vue项目,然后使用Vue的组件,指令和绑定来构建用户注册界面,并使用Vuex来管理应用程序的状态。 用户注册完成后可以使用服务器端的技术来处理注册信息,并将源代码放在GitHub上进行版本控制。 ### 回答2: Vue是一个流行的JavaScript框架,可以帮助我们更轻松地构建用户界面。下面是一个用Vue编写的简单用户注册网页的示例代码。 首先,我们需要在HTML文件中引入Vue的CDN链接: ```html <!DOCTYPE html> <html> <head> <title>用户注册</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="app"> <h1>用户注册</h1> <form> <div> <label>用户名:</label> <input type="text" v-model="username"> </div> <div> <label>密码:</label> <input type="password" v-model="password"> </div> <button @click="register">注册</button> </form> <p v-if="registered">注册成功!</p> </div> <script> new Vue({ el: '#app', data: { username: '', password: '', registered: false }, methods: { register: function() { // 在实际应用中,这里可以将用户名和密码发送到服务器进行验证和保存 // 这里我们只简单地将registered设置为true来模拟注册成功 this.registered = true; } } }); </script> </body> </html> ``` 在上述示例代码中,我们使用了Vue的双向数据绑定(v-model)来实现对输入框的数据绑定。用户输入的用户名和密码会被保存在Vue实例的data对象中的对应属性中,即`username`和`password`。 当用户点击"注册"按钮时,我们调用了`register`方法。在一个真实的应用中,我们可以在这个方法中向服务器发送用户输入的用户名和密码进行验证和保存。在这个示例中,我们只是简单地将`registered`属性设置为`true`,以模拟注册成功。 根据`registered`属性的值,我们使用了Vue的条件渲染(v-if)来在注册成功时显示一条"注册成功!"的消息。 以上是一个用Vue编写的简单用户注册网页的示例代码,希望对您有帮助。 ### 回答3: 源代码如下: ``` <!DOCTYPE html> <html> <head> <title>用户注册</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="app"> <h2>用户注册</h2> <form @submit.prevent="submitForm"> <label for="username">用户名:</label> <input type="text" id="username" v-model="form.username" required><br><br> <label for="email">邮箱:</label> <input type="email" id="email" v-model="form.email" required><br><br> <label for="password">密码:</label> <input type="password" id="password" v-model="form.password" required><br><br> <button type="submit">注册</button> </form> <p v-if="registered">注册成功!</p> </div> <script> new Vue({ el: '#app', data: { form: { username: '', email: '', password: '' }, registered: false }, methods: { submitForm() { // 在这里进行后续的用户注册逻辑,例如发送POST请求给服务器并处理响应 // 假设注册成功后服务器返回一个成功的标志位"success",我们在这里模拟注册成功的情况 // 实际应用中,应该根据实际情况调用后端API进行注册 // 这里只是一个简洁的演示 this.registered = true; this.form = { username: '', email: '', password: '' }; } } }); </script> </body> </html> ``` 以上是利用Vue编写的一个用户注册页面简单示例页面中包含一个表单,包括用户名、邮箱和密码的输入框以及一个注册按钮。在用户提交表单后,可以在`submitForm`方法中进行后续的用户注册逻辑,例如发送请求给服务器并处理响应。这里为了简洁起见,只是模拟了注册成功的情况,并在页面上显示注册成功的提示信息。实际应用中,应根据实际情况调用后端API进行注册和验证用户输入的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值