JWT项目-Firebase/Php-JWT-使用JWT从服务器获取数据
时间:2020-02-23 14:46:18 来源:igfitidea点击:
在本项目教程中,我们将使用JWT或者JSON Web令牌从服务器获取数据。
在上一教程中,我们学习了如何生成和验证JWT。
登录
打开我们在简介教程中创建的script.js文件。
我们将调用用户验证API。
API: http://localhost/jwt-php-project/api/user METHOD: POST DATA: { "email": {email}, "password": {password} }
成功后,我们将从服务器获得以下响应。
{ "code": 200, "status": "success", "message": "Valid login credentials.", "userid": "u1", "jwt": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyaWQiOiJ1MSIsImlhdCI6MTUyMzgwMTA3OSwiZXhwIjoxNTIzODAxMTM5fQ.ProXLhQbSEqfwj3DAqdJQSJmT8q2JgAw_uJP3BgiSmg" }
为了验证用户登录凭据,我们将编写以下简单的jQuery代码。
$('#login').on('submit', function (e) { //login $.ajax({ url: './api/user', type: 'POST', data: JSON.stringify({ email: $('#login-email').val(), password: $('#login-password').val() }), success: function (data) { var html = "<pre>" + JSON.stringify(data, null, 2) + "</pre>" + "<hr>" + "<button class='btn btn-primary' id='getuser' data-jwt='" + data.jwt + "'>Get User Detail</button>" + "<hr>" + "<div id='detail-container'></div>"; $('#result-container').html(html); $('#login')[0].reset(); }, error: function () { } }); return false; });
在上面的代码中,我们正在监听登录表单Submit事件。
在提交表单时,我们将使用用户提供的电子邮件地址和密码,然后调用API进行验证。
如果输入的详细信息正确,我们将获得成功答复。
上面的成功响应包含为提供的用户登录凭据生成的" jwt"。
我们将使用此JWT值来获取用户详细信息。
注意!我们还具有"获取用户详细信息"按钮,单击该按钮将通过使用生成的JWT调用API来使用用户详细信息。
获取用户详细信息
为此,我们将调用获取用户详细信息API。
API: http://localhost/jwt-php-project/api/user METHOD: GET PARAMETER: jwt={jwt}
如果传递给服务器的jwt
值有效,那么我们将返回以下响应。
{ "code": 200, "status": "success", "data": { "userid": "u1", "email": "@example.com", "firstname": "", "lastname": "" }, "jwt_payload": { "userid": "u1", "iat": 1523801079, "exp": 1523801139 } }
因此,为了获得用户详细信息,我们将编写以下代码,这些代码将在单击按钮时触发。
$('body').on('click', '#getuser', function (e) { var jwt = $(this).attr('data-jwt'); //get user detail $.ajax({ url: './api/user', type: 'GET', data: { jwt: jwt }, success: function (data) { if (data.status === 'success') { var lifespan = Number(data.jwt_payload.exp - data.jwt_payload.iat); //in ms var html = "<p>For this demo JWT will expire after " + lifespan + " seconds.</p>" + "<pre>" + JSON.stringify(data, null, 2) + "</pre>"; $('#detail-container').html(html); setTimeout(function () { $('#detail-container').html('<p>JWT expired!</p>'); }, lifespan * 1000); } else { var html = "<pre>" + JSON.stringify(data, null, 2) + "</pre>"; $('#detail-container').html(html); } }, error: function () { } }); });
成功后,我们将从服务器获取以下响应。
注意!对于此演示项目,JWT设置为在60秒后过期。
因此,到期后,我们将看到以下消息。
到期后,如果我们尝试单击"获取用户详细信息"按钮以获取用户详细信息,我们将收到无效的JWT消息。