Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

现在的/auth/login使用账号密码登录失败 #12

Open
luohan475947645 opened this issue Mar 23, 2021 · 5 comments
Open

现在的/auth/login使用账号密码登录失败 #12

luohan475947645 opened this issue Mar 23, 2021 · 5 comments

Comments

@luohan475947645
Copy link

luohan475947645 commented Mar 23, 2021

我在蓝桥云课上买了您这个课程,然后
项目前端和后端,已在本地环境搭建。使用账号密码登陆时出错。
1

https://dn-simplecloud.shiyanlou.com/courses/uid1664790-20210323-1616485655153
2

https://dn-simplecloud.shiyanlou.com/courses/uid1664790-20210323-1616485682891
使用postman测试时,也是这样的结果 图片描述
3

https://dn-simplecloud.shiyanlou.com/courses/uid1664790-20210323-1616485729643
但账号密码是能够正常登录蓝桥云课的网站的

麻烦老师看一下是什么问题,或者这个接口是不是被他们改过了

@HuberTRoy
Copy link
Owner

@luohan475947645

抱歉现在才回复...

具体原因未知,可以提供更多信息,一起尝试下分析现有的账号密码登录机制。

也有可能这个API只对旧账号有效,所以我这里尝试有效。

@luohan475947645
Copy link
Author

@luohan475947645

抱歉现在才回复...

具体原因未知,可以提供更多信息,一起尝试下分析现有的账号密码登录机制。

也有可能这个API只对旧账号有效,所以我这里尝试有效。

估计是新旧账号的问题吧,我尝试用蓝桥云课的api做登录,但返回的数据结构和旧的实验楼的不一样。
那您能提供一个学习用的旧帐号,或者做一份模拟数据的转发吗,我近期正在蓝桥云课上学习你的教程,不然没法往下实验了。

@HuberTRoy
Copy link
Owner

@luohan475947645

看了一下,新注册的蓝桥用户确实设置不了密码这应该是他的一个BUG。

现在有几条路可以选择:

  1. 使用现在的API进行登录:
POST https://main.lanqiao.cn/api/user/login

使用formData提交:

loginname: 手机号
userpass: 密码
lqtoken: 这个可以用控制台打印出来的token信息。

这个API登录后直接设置了cookies,你需要拿到cookies并返回。

你可以先自己试一试,是一个很好的探索,通过搜索引擎尝试解决遇到的问题,真实工作会有很多需要探索的时刻。

有卡主的点可以直接回复。

  1. 直接绕过:

你登录之后把得到的cookies直接设置上。

祝好~。

@luohan475947645
Copy link
Author

@luohan475947645

看了一下,新注册的蓝桥用户确实设置不了密码这应该是他的一个BUG。

现在有几条路可以选择:

  1. 使用现在的API进行登录:
POST https://main.lanqiao.cn/api/user/login

使用formData提交:

loginname: 手机号
userpass: 密码
lqtoken: 这个可以用控制台打印出来的token信息。

这个API登录后直接设置了cookies,你需要拿到cookies并返回。

你可以先自己试一试,是一个很好的探索,通过搜索引擎尝试解决遇到的问题,真实工作会有很多需要探索的时刻。

有卡主的点可以直接回复。

  1. 直接绕过:

你登录之后把得到的cookies直接设置上。

祝好~。

我改写了vue-shiyanlou-backend的login视图函数如下:

@csrf_exempt
def login(request):
    raw = json.loads(request.body.decode('utf-8'))
    # 获取lqtoken
    temp = requests.post('https://main.lanqiao.cn/api/outer/createtoken')
    lqtoken = temp.cookies.get('lqtoken')
    form_data = {
        'loginname':raw['login'],
        'userpass':raw['password'],
        'checked':'false',
        'usertype':0,
        'lqtoken':lqtoken,
    }
    content = requests.post('https://main.lanqiao.cn/api/user/login/', data=form_data)

    res = HttpResponse(content=content)
    for k, v in content.cookies.iteritems():
        print('cookie内容:', k, v)
        res.set_cookie(k, v)
    return res

现在的情况是这个content能够验证成功,返回数据结构如下:

{'code': 200, 'msg': 'OK', 'data': {'appuuid': None, 'urls': []}}
cookie内容: lqtoken 8A84F80295F3D270AB585EA7E4EC5C5A

但返回到vue的前端界面没有跳转到登录状态,是否是旧的api的返回数据结构不同的原因。
因为我不太熟悉vue,希望您有时间再排查一下看看,,谢谢

@HuberTRoy
Copy link
Owner

@luohan475947645

你几乎已经写出来了,在真实环境下这样的登录交互大部分都不需要前端操作了。

得到了cookies之后,在这个实验中common/login.vue中得到了内容之后手动设置了session:

import cookies from 'vue-cookies'
import { mapActions } from 'vuex'

methods: {
    ...mapActions({
        changeLoginState: 'login/changeLoginState'
    }),
    async login() {
        let res = await loginApi.login({
            login: this.username,
            password: this.password,
            remeber: false
        })
        if (res.data.code !== 'validation_error') {
            this.changeLoginState(true)
            // 注意这一行,获取返回值的session的值并手动设置了一个session。
            // 这个session获取的是返回值里的内容 {'code': 200, 'msg': 'OK', 'data': {'appuuid': None, 'urls': []}} 所以你需要加一个字段。
            cookies.set('session', res.data.session)
            this.close()
        }
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants