繁体   English   中英

Django 与 React 和 JWT 身份验证错误

Django with React and JWT authontication error

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

I'm using django simple jwt with react redux in frontend A user registered from django admin panel can login but a user registered from the frontend can't login, it through a 401 bad request unauthorized user error(pin):"Request failed with状态码 400" 错误请求:/api/users/login/ "POST /api/users/login/ HTTP/1.1" 400

序列化程序.py

  class UserSerializer(serializers.ModelSerializer):
    name = serializers.SerializerMethodField(read_only=True)
    _id = serializers.SerializerMethodField(read_only=True)
    isAdmin = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = User
        fields = ['id', '_id', 'username', 'email', 'name', 'isAdmin']
    def get__id(self, obj):
        return obj.id

    def get_isAdmin(self, obj):
        return obj.is_staff

    def get_name(self, obj):
        name = obj.first_name
        if name == '':
            name = obj.email

        return name

class UserSerializerWithToken(UserSerializer):
    token = serializers.SerializerMethodField(read_only=True)
    class Meta:
        model = User
        fields = ['id', '_id', 'username', 'email', 'name', 'isAdmin', 'token']

    def get_token(self, obj):
        token = RefreshToken.for_user(obj)
        return str(token.access_token)  

用户视图.py

class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
   
    def validate(self, attrs):
        data = super().validate(attrs)
        serializer = UserSerializerWithToken(self.user).data
        for k, v in serializer.items():
           data[k] = v 
        print("login",data)
        return data


class MyTokenObtainPairView(TokenObtainPairView):
    serializer_class = MyTokenObtainPairSerializer



@api_view(['POST'])
def registerUser(request):
    data = request.data
    print("Data: ",data)
    try:
        user = User.objects.create_user(
            first_name=data['name'],
            username=data['email'],
            email=data['email'],
            password=make_password(data['password'])
        )
        serializer = UserSerializerWithToken(user,many=False)
        return Response(serializer.data)
    except:
        message = {'detail':'User with this email already exists.'}
        return Response(message,status=status.HTTP_400_BAD_REQUEST)

userAction.js

export const login = (email, password) => async (dispatch) => {
    try {

            dispatch({
                    type: USER_LOGIN_REQUEST,
                
                    })
            const config = {
                    headers: {
                        'Content-type': 'application/json'
                    }
            }
            const {data} = await axios.post(
                    '/api/users/login/',
                    {'email': email, 'password': password},
                    config
                )
            dispatch({
                type: USER_LOGIN_SUCCESS,
                payload: data
            })
            
            localStorage.setItem('userInfo', JSON.stringify(data))

            } catch (error) {
                dispatch({
                    type: USER_LOGIN_FAIL,
                    payload: error.response && error.response.data.detail
                        ? error.response.data.detail
                        : error.message
                })
            }
        }

export const logout = () => (dispatch)  => {
    localStorage.removeItem('userInfo')
    dispatch({ type: USER_LOGOUT})
} 

export const register = (name, email, password) => async (dispatch) => {
    try {

            dispatch({
                    type: USER_REGISTER_REQUEST,
                
                    })
            const config = {
                
                    headers: {
                        'Content-type': 'application/json'
                    }
            }
            const {data} = await axios.post(
                    '/api/users/register/',
                    {'name' : name, 'email': email, 'password': password},
                    config
                )
            dispatch({
                type: USER_REGISTER_SUCCESS,
                payload: data
            })

            dispatch({
                type: USER_LOGIN_SUCCESS,
                payload: data
            })
            
            localStorage.setItem('userInfo', JSON.stringify(data))

            } catch (error) {
                dispatch({
                    type: USER_REGISTER_FAIL,
                    payload: error.response && error.response.data.detail
                        ? error.response.data.detail
                        : error.message
                })
            }
        }
问题暂未有回复.您可以查看右边的相关问题.
1 使用React处理JWT身份验证

我正在尝试找出一个使用JWT进行身份验证的React应用,我真的不知道如何计划它,例如: 步骤1: 用户成功登录应用程序,获取保存在localStorage上的JWT令牌。 步骤2: 一旦用户登录,路由更改并发出了对REST API的请求,该请求将使用先前保存的令牌进行身份验证。 ...

5 离子3的JWT身份验证登录错误

我用symfony构建了一个API,并且在浏览器中一切正常,但是当我在设备(Android)上尝试时,出现错误“服务器错误”,是否是兼容性问题,请发布我的代码,请帮助! 登录提供商: 函数handleError: 包json: 身份验证提供者: 在浏览器中工 ...

6 Django身份验证错误

我在django中很陌生,我想验证一个用户。 但是我无法使用身份验证功能来做到这一点。 我看过django中的authenticate函数。 并且总是显示TypeError。 我在单独的时间中同时使用了unicode和string,但始终显示TypeError。 请任何帮助将不胜感激。 ...

7 Django身份验证错误

如何解决这个问题 错误:一个或多个模型未验证:auth.permission:“ content_type”与模型类“ django.contrib.contenttypes.models.ContentType”有关系,该模型类尚未安装或是抽象的。 ...

2012-09-17 12:15:50 0 390   django
8 JWT 使用 React/Node 进行身份验证

在尝试在 Node/React 应用程序中使用 JWT httpOnly 实现身份验证时,我遇到了“奇怪”的行为。 基本上我有一个“登录”服务,如果用户和密码正确,它会提供一个包含 httpOnly 访问令牌的响应。 如果是这样,响应将如下所示: (NODEjs - 登录片段) 这意味着从现在开始 ...

9 Django和Vue.js之间的JWT身份验证

我希望在包含标准Django和模板的网站上创建一个公共区域。 当用户登录到成员区域时,他们将登录到SPA(使用Vue.js )和Django Rest Framework 。 一旦用户登录到成员区域,我将使用JWT处理SPA和后端之间的身份验证。 这是用户旅程: 用户浏览站点 ...

10 JWT多重身份验证

在一个网站进行身份验证时,如果两个网站共享相同的加密密钥,我是否可以使用返回的JWT来与另一个网站进行身份验证? 我在第一个网站上进行了身份验证,然后使用返回的密钥在第二个网站上进行身份验证时,他说 '签名验证失败jwt' 但是我使用了相同的密钥加密 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM