django-rest-framework之 json web token方式完成用户认证
json web token的介绍:https://blog.csdn.net/kevin_lcq/article/details/74846723
1. 安装
$ pip install djangorestframework-jwt
2. 添加配置
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
}
3. 添加URL
from rest_framework_jwt.views import obtain_jwt_token
#... urlpatterns = [
'',
# ...
# jwt的认证接口
url(r'^api-token-auth/', obtain_jwt_token),
]
向该接口post用户名和密码,会返回token串。
4. 实际使用
实际使用登录时,是post用户名和密码,然后系统验证用户名和密码的正确性,正确返回token,那么上面的url是根据django的auth去验证的。那么对于验证的提示可能不太好控制,所以自己写登录验证,在验证通过之后,返回token。
验证放在serializer中:
# 登录 列化类
class UserSerializer(serializers.ModelSerializer):
username = serializers.CharField(max_length=11)
# password = PasswordField(write_only=True) def validate(self, attr):
user = authenticate(username=attr["username"], password=attr["password"])
if user:
return attr
else:
raise serializers.ValidationError("用户名或密码错误...") class Meta:
model = UserProfile
fields = ('username', 'password')
View:
# 用户登录/个人信息
class UserViewSet(mixins.CreateModelMixin, mixins.RetrieveModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet):
queryset = UserProfile.objects.all() # 动态 返回序列化器类 默认返回serializer_class,可以重写
def get_serializer_class(self):
if self.action == "retrieve": # action:update partial_update
return UserInfoSerializer
elif self.action == "create":
return UserSerializer
return UserInfoSerializer # 动态加载权限验证
def get_permissions(self):
if self.action == "retrieve":
return [permissions.IsAuthenticated()]
elif self.action == "create":
return []
return [] def create(self, request, *args, **kwargs): # 用户登录返回token
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
# re_dict = serializer.data post 的数据
payload = jwt_payload_handler(self.request.user) # print(payload)
token_str = jwt_encode_handler(payload)
headers = self.get_success_headers(serializer.data)
return Response(token_str, status=status.HTTP_201_CREATED, headers=headers)
官网:http://getblimp.github.io/django-rest-framework-jwt/
django-rest-framework之 json web token方式完成用户认证的更多相关文章
- Python Tornado集成JSON Web Token方式登录
本项目github地址 前端测试模板如下: Tornado restful api 项目 项目结构如下: 项目组织类似于django,由独立的app模块构成. 登录接口设计 模式:post -> ...
- JWT(JSON WEB TOKEN) / oauth2 / SSL
1: JWT: 为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景.JWT的声明一般被 ...
- 一分钟简单了解 JSON Web Token
JSON Web Token(JWT)是一个开放的标准(RFC 7519),它定义了一个紧凑且自包含的方式,用于在各方之间作为 JSON 对象安全地传输信息.由于此信息是经过数字签名的,因此可以被验证 ...
- Python 生成 JWT(json web token) 及 解析方式
一.关于 jwt 的原理及概念可以自行在网络上搜索了解一下,这里推荐一篇写的比较好的博客 深入了解Json Web Token之概念篇 另附 JWT 的官方文档: https://jwt.io/int ...
- 使用json web token
由来 做了这么长时间的web开发,从JAVA EE中的jsf,spring,hibernate框架,到spring web MVC,到用php框架thinkPHP,到现在的nodejs,我自己的看法是 ...
- 42.JSON Web Token认证
JSON Web Token认证介绍 简称JWT认证,一般用于用户认证 JWT是一种相当新的标准,可用于基于token的身份验证 与内置的TokenAuthentication方案不同,JWT不需要使 ...
- 使用Json Web Token设计Passport系统
>>Token Auth机制 基于Token的身份验证是无状态的,我们不将用户信息存在服务器或Session中. 相比原始的Cookie+Session方式,更适合分布式系统的用户认证,绕 ...
- JWT【JSON Web Token】 简述
draft: http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html http://tools.ietf.org/html/ ...
- 八幅漫画理解使用JSON Web Token设计单点登录系统
用jwt这种token的验证方式,是不是必须用https协议保证token不被其他人拦截? 是的.因为其实只是Base64编码而已,所以很容易就被解码了.如果你的JWT被嗅探到,那么别人就可以相应地解 ...
随机推荐
- python之uWSGI和WSGI
WSGI协议 首先弄清下面几个概念:WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web ...
- javascript学习方法指南
Javascript看似无限的可能性使得基于HTML和CSS的公共网站成为过去.然而,尽管JavaScript为用户提供了出色的动态体验,但它也为开发人员创建了一个雷区.因此,Javascript搜索 ...
- 解决docker pull 速度慢问题
解决docker pull 速度慢问题 将docker镜像源修改为国内的: 在 /etc/docker/daemon.json 文件中添加以下参数(没有该文件则新建): { "registr ...
- webpack升级4出现的问题
webpack3升级到4出现了很多问题,经过验证报错信息如下 1 Module parse failed: Unexpected token (:) You may need an appropria ...
- source命令用法:
命令格式 source FileName 作用 在当前bash环境下读取并执行FileName中的命令. 注意 该命令通常用命令"."来替代.如:source .bash_rc 与 ...
- 【2017-05-19】WebForm复合控件、用DropDownList实现时间日期选择。
自动提交的属性: AutoPostBack="True" 1.RadioButtonList 单选集合 -属性:RepeatDirection:Vertical (垂直排布 ...
- B+(B)树和B-树
转载自 http://www.cnblogs.com/nullzx/ 1.B树 定义:B树也称B-树,它是一颗多路平衡查找树.我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点 ...
- xtrabackup的使用
Percona-xtrabackup是 Percona公司开发的一个用于MySQL数据库物理热备的备份工具. 一.安装xtrabackup 采用rpm包的方式进行安装 [root@server- ~] ...
- Java语言基础(11)
1 构造方法 构造方法是一种特殊的方法,只有在创建对象的时候才被调用,用来执行初始化的操作,比如给属性赋值... 1) 构造方法名字跟类名一致,没有返回值也就没有返回值类型 2) 格式: 类名(参数列 ...
- E - We Need More Bosses CodeForces - 1000E (tarjan缩点,树的直径)
E - We Need More Bosses CodeForces - 1000E Your friend is developing a computer game. He has already ...