热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

无法通过我的Lumen后端访问JavascriptWeb令牌

我正在关注本教程

我正在关注本教程https://medium.com/tech-tajawal/jwt-authentication-for-lumen-5-6-2376fd38d454,以了解如何为我的管腔后端设置基于令牌的身份验证。

到目前为止,一切正常。直到最后,我才无法获得代币Oo
我认为我的代码没有任何问题。
使用RESTClient进行http请求时:“ http://localhost:8080/users”
我得到了所需的“'错误':'未提供令牌'”

但是,当我尝试按照本教程中的说明获取令牌时,出现错误,提示未提供名称和电子邮件字段。
这是我的控制器代码(或本教程中的代码),用于评估对传输的名称和电子邮件值的请求:

namespace App\Http\Controllers;
use Validator;
use App\User;
use Firebase\JWT\JWT;
use Illuminate\Http\Request;
use Firebase\JWT\Expiredexception;
use Illuminate\Support\Facades\Hash;
use Laravel\Lumen\Routing\Controller as BaseController;
class AuthController extends BaseController
{
/**
* The request instance.
*
* @var \Illuminate\Http\Request
*/
private $request;
/**
* Create a new controller instance.
*
* @param \Illuminate\Http\Request $request
* @return void
*/
public function __construct(Request $request) {
$this->request = $request;
}
/**
* Create a new token.
*
* @param \App\User $user
* @return string
*/
protected function jwt(User $user) {
$payload = [
'iss' => "lumen-jwt",// Issuer of the token
'sub' => $user->id,// Subject of the token
'iat' => time(),// Time when JWT was issued.
'exp' => time() + 60*60 // Expiration time
];
// As you can see we are passing `JWT_SECRET` as the second parameter that will
// be used to decode the token in the future.
return JWT::encode($payload,env('JWT_SECRET'));
}
/**
* Authenticate a user and return the token if the provided credentials are correct.
*
* @param \App\User $user
* @return mixed
*/
public function authenticate(User $user) {
$this->validate($this->request,[
'email' => 'required|email','password' => 'required'
]);
// Find the user by email
$user = User::where('email',$this->request->input('email'))->first();
if (!$user) {
// You wil probably have some sort of helpers or whatever
// to make sure that you have the same response format for
// differents kind of responses. But let's return the
// below respose for now.
return response()->json([
'error' => 'Email does not exist.'
],400);
}
// Verify the password and generate the token
if (Hash::check($this->request->input('password'),$user->password)) {
return response()->json([
'token' => $this->jwt($user)
],200);
}
// Bad Request response
return response()->json([
'error' => 'Email or password is wrong.'
],400);
}
}

这是中间件的代码:

namespace App\Http\Middleware;
use Closure;
use Exception;
use App\User;
use Firebase\JWT\JWT;
use Firebase\JWT\Expiredexception;
class JwtMiddleware
{
public function handle($request,Closure $next,$guard = null)
{
$token = $request->get('token');
if(!$token) {
// Unauthorized response if token not there
return response()->json([
'error' => 'Token not provided.'
],401);
}
try {
$credentials = JWT::decode($token,env('JWT_SECRET'),['HS256']);
} catch(Expiredexception $e) {
return response()->json([
'error' => 'Provided token is expired.'
],400);
} catch(Exception $e) {
return response()->json([
'error' => 'An error while decoding token.'
],400);
}
$user = User::find($credentials->sub);
// Now let's put the user in the request class so that you can grab it from there
$request->auth = $user;
return $next($request);
}
}

我已经在bootstrap / app.php中注册过:

$app->routeMiddleware([
'jwt.auth' => App\Http\Middleware\JwTMiddleware::class,]);

但是我的JSON有效负载看起来像这样,所以应该可以工作。

[
{
"email": "ibeier@hotmail.com,"name": "Eusebio Dach",}
]

但是,我必须承认,本节中的教程在细节上有些欠缺。
这是我无法工作的(最后)部分:


为了使此私密请求成功,我们需要提供令牌作为查询参数。我们可以通过在Postman应用程序中点击以下路线http://localhost:8000/auth/login来获得令牌。现在,您已经打开了私密失败请求的令牌,这次在“参数”部分中创建一个密钥令牌,并将其值设置为您在上一个请求中收到的令牌。然后将请求发送到http://localhost/users路由,您将得到用户列表作为响应。
(带有用户数据的屏幕截图,请参阅教程)
到此为止。如有任何疑问,请在下面留下您的评论。

我不确定是否提供了正确的请求数据,以及是否正确设置了所有标头。
也许对此有更多了解的人可以帮助我理解我所缺少的东西。
我已经尝试过研究其他教程,但是这些教程对内腔采用了不同的jwt扩展,并且似乎在其控制器代码中也采用了其他方法。
我非常想遵循本教程,因为它的方法对我而言似乎很简单。
如果有人可以告诉我该教程对他们有用,并且除了通过教程提供的说明之外,还可以告诉我他们做了什么,这也将有所帮助。
因为那样的话,我将再次进行本教程,看看是否可以使它正常工作。





推荐阅读
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 本文详细介绍了在腾讯云服务器上配置 phpMyAdmin 的方法,包括安装、配置和解决常见问题。通过这些步骤,您可以轻松地在腾讯云环境中部署并使用 phpMyAdmin。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • 深入探讨Web页面中的锚点交互设计
    本文旨在分享Web前端开发中关于网页锚点效果的实现与优化技巧。随着Web技术的发展,越来越多的企业开始重视前端开发的质量和用户体验,而锚点功能作为提升用户浏览体验的重要手段之一,值得深入研究。 ... [详细]
  • 本文将详细介绍通过CAS(Central Authentication Service)实现单点登录的原理和步骤。CAS由耶鲁大学开发,旨在为多应用系统提供统一的身份认证服务。文中不仅涵盖了CAS的基本架构,还提供了具体的配置实例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文详细介绍了如何在Python3环境中配置Appium1.4.6,并指导如何连接模拟器进行自动化测试。通过本文,您将了解从环境搭建到模拟器连接的完整流程。 ... [详细]
  • 本文探讨了SSDP(简单服务发现协议)和WSD(Web服务发现)协议,特别是SSDP如何通过固定多播地址239.255.255.250:1900实现局域网内的服务自发现功能。文中还详细介绍了SSDP协议的关键操作类型及其应用场景。 ... [详细]
  • YB02 防水车载GPS追踪器
    YB02防水车载GPS追踪器由Yuebiz科技有限公司设计生产,适用于车辆防盗、车队管理和实时追踪等多种场合。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
author-avatar
阳光明媚-在路上
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有