我正在使用 jsonwebtoken 包(https://github.com/auth0/node-jsonwebtoken)来处理项目中的 JWT。无论我尝试什么,它都会给我这个错误:name: 'JsonWebTokenError', message: 'invalid signature'
这是我签署 JWT 的地方:
const addBearerToken = (myUser, cb) => {
jwt.sign({user: myUser, userId: myUser.id}, 'helloworld', (err, token) => {
if (err) return (err, null)
userRepo.update(myUser._id, {authToken: token}, (err, myUser) => {
if (err) {
return cb(err, null)
} else {
return cb(null, token)
}
})
})
}
Run Code Online (Sandbox Code Playgroud)
这是我尝试验证的地方:
const checkForJWT = (req, res, next) => {
let bearerHeader = req.header('Authorization').split(' ')
let token = bearerHeader[1]
console.log(token + ' || …Run Code Online (Sandbox Code Playgroud) 我有一个正在单元测试的网络应用程序。我正在尝试测试 drf 序列化器,但序列化器更改了日期时间的格式,因此格式不同的相同日期无法通过测试,因为它们不相同。
我尝试格式化序列化器 timeDateField,但它们使用的所有 strftime 格式都是零填充的,并且我的测试用户上次登录属性给出的日期没有零填充。我认为该解决方案可以按照所选答案在此处描述的方式来解决,但这似乎有点粗略,理想情况下,我作为必须维护此代码的人,想要一个更干净或更Pythonic的解决方案。
这是测试:
class UserTest(TestCase):
def setup(self):
last_login = datetime.datetime(2000, 1, 1, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
date_joined = datetime.datetime(2019, 2, 2, hour=2, minute=2, second=2, microsecond=2, tzinfo=None)
birthdate = timezone.now().date()
renewal = timezone.now().date()
return User.objects.create(username='test_user', first_name='test_first', last_name='test_last',
email='test_mail', last_login=last_login, date_joined=date_joined,
birthdate=birthdate, gender='U', renewal=renewal)
def test_user_serializer(self):
self.u = self.setup()
serializer = UserSerializer(self.u, many=False)
data = serializer.data
.....
# tests for serialized attributes
self.assertEquals((data['last_login']), self.u.last_login) # FAILING THE TEST
Run Code Online (Sandbox Code Playgroud)
这是用户序列化器:
class UserSerializer(serializers.ModelSerializer):
last_login = …Run Code Online (Sandbox Code Playgroud) python datetime unit-testing django-serializer django-rest-framework
我在了解如何使身份验证正常工作时遇到了麻烦。我已经设置了基本的api,并且正在尝试使任何类型的身份验证都能正常工作(从基本身份验证开始)。但是无论做什么,我都可以从数据库中检索信息(使用Postman),而无需输入用户名或密码。我究竟做错了什么?
这是我的课:
class User(models.Model):
birthdate = models.DateField()
gender = models.CharField(
max_length=1,
choices=(('M', 'Male'), ('F', 'Female'), ('O', 'Other'), ('U', 'Unspecified'))
)
join_date = models.DateField(auto_now_add=True)
username = models.CharField(max_length=25, unique=True)
password = models.CharField(max_length=25,)
Run Code Online (Sandbox Code Playgroud)
这是我的看法:
def user_tester(request):
permission_classes = (IsAuthenticated,)
if request.method == 'GET':
objs = User.objects.all()
serializer = UserSerializer(objs, many=True)
return JsonResponse(serializer.data, safe=False)
Run Code Online (Sandbox Code Playgroud)
以下是相关设置:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
)
}
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
Run Code Online (Sandbox Code Playgroud)
请告知我我做错了什么。我对Django有一定的经验,但对身份验证或权限一点都不了解。