我在Django中实现了Oauth2,并且刷新令牌位于o / token / url下, 我想定义另一个这样的网址:
path('api / v1 / login',Login.as_view()), 在我的登录视图中,我想要这样的东西:
class login(APIView):
def post(self,request):
client_id = "123"
client_Secret = "123"
username = request.query_params.get('username')
....
*problem is here*
我想在登录类中定义这些参数,然后将其传递给o / token / url并获得令牌。 实际上,当用户输入www.example.com/api/v1/login地址时,它仅输入用户名和密码,并且之前在我的代码中我对OAuth说了我的客户信息是什么,然后令牌就会生成。
答案 0 :(得分:0)
我认为您想要做的是为您的用户定义一个登录路由,的确是,如果我们在前端传递client_id和client_secret,将会有很多安全问题,因此我们将其隐藏在代码中。 您应该做的是为登录定义一个新的路由,然后在视图中定义一个需要用户/用户通过的post方法,并将此数据与您在代码中输入的一些数据一起发送到请求命令(请在此处检查: enter link description here) 请注意,为了在输出中具有JSON响应,您需要返回Response(r.json()) 从而: url.py
class Login(APIView):
def post(self, request, *args, **kwargs):
username = request.POST['username']
password = request.POST['password']
r = requests.post('http://localhost:8000/api/o/token/', #your token address
data = {'grant_type':'password', # your defined grant type
'client_id':'123', # your clinet id
'client_secret':'123', #your client secret
'username': username, # your username that you get from user
'password':password #your password that you get from user
view.py
{{1}}
}) 返回json格式的Response(r.json())#response