小编Bri*_*ian的帖子

为什么 jsonwebtoken 抛出“无效签名”错误?

我正在使用 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)

node.js jwt express-jwt

5
推荐指数
1
解决办法
2万
查看次数

如何测试不同格式的日期和日期时间?

我有一个正在单元测试的网络应用程序。我正在尝试测试 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

2
推荐指数
1
解决办法
1649
查看次数

如何使Django REST身份验证有效?

我在了解如何使身份验证正常工作时遇到了麻烦。我已经设置了基本的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有一定的经验,但对身份验证或权限一点都不了解。

authentication api django django-rest-framework

1
推荐指数
1
解决办法
373
查看次数