100 快求 Django 后端的微信公众号授权登录 demo

2017-11-06 11:09:34 +08:00
 ossicee
各位好,想请各位帮忙写个以 Django 为后端的微信公众号 auth 授权登录的 demo

因为基础比较差,我憋了几天都没憋出来。只能来 v2 求助了。

100 块不多,只能在您点外面的时候多点几瓶可乐。多点一份菜,如果不够请讲。谢谢

zanderzhg#gmail.com
6079 次点击
所在节点    Django
19 条回复
ossicee
2017-11-06 11:11:59 +08:00
我也不知道行情。不够我可以加
chen2016
2017-11-06 11:17:43 +08:00
参考自强学院的 django 教程
ossicee
2017-11-06 11:23:54 +08:00
@chen2016 他这个我没找到微信公众号授权登录的例子
liuzhedash
2017-11-06 11:32:31 +08:00
我不会 Django,但是这其实不是 100 块钱的事儿,因为 2 点:
1、如果楼主没搞明白 oath 登陆的流程,需要先搞明白;否则即使花钱买了 demo,公众号变化或者其他环境变了也没法用
2、如果楼主明白 oath 登陆的流程,那么需要仔细排查公众号的配置和 demo 是否能匹配,这个排查工作和技术没直接关系,也不适合外人做

个人意见,仅供参考
lyhapple
2017-11-06 11:33:18 +08:00
才 100 块.
tinypig
2017-11-06 11:35:05 +08:00
ossicee
2017-11-06 11:47:44 +08:00
@liuzhedash 好的,谢谢,我再学习一下
ossicee
2017-11-06 11:48:01 +08:00
@lyhapple 可以加的,我也不懂行情
ossicee
2017-11-06 11:48:16 +08:00
@tinypig 谢谢您
haonan3344
2017-11-06 11:58:37 +08:00
楼主这是自掏腰包干工作呢,真是令人心情复杂啊
Marmot
2017-11-06 14:38:56 +08:00
就是一个重定向到你自定义的链接,然后带一个 code (主要)和一些其他信息过来,然后你拿这个 code 去微信取信息,这一百块自己留着吧,都是菜鸟过来的。
chengxiao
2017-11-06 15:28:52 +08:00
已发邮件
chenxipeng
2017-11-06 15:30:50 +08:00
@liuzhedash 说的很对
SingeeKing
2017-11-06 16:02:14 +08:00
主要就是加一个 Authentication,通过 OpenID 登录

然后使用 http://wechatpy.readthedocs.io/zh_CN/master/oauth.html#module-wechatpy.oauth
SingeeKing
2017-11-06 16:04:19 +08:00
from .models import WeUser
from django.contrib.auth.models import User


class WechatOpenidAuth(object):
def get_user(self, user_id):
try:
return User.objects.get(id=user_id)
except User.DoesNotExist:
return None

def authenticate(self, openid=None):
weus = WeUser.objects.filter(openID=openid, available=True)

for weu in weus:
if not weu.user.has_perm('settings.is_admin'):
return weu.user
return None




def login(request):
code = request.GET.get('code')
next = request.GET.get('state', reverse('index'))
we_auth_base = WeChatOAuth(app_id=settings.WECHAT_APP_ID, secret=settings.WECHAT_APP_SECRET,
redirect_uri=request.build_absolute_uri(reverse('wechatLogin')),
scope='snsapi_base',
state=next)
if not code:
try:
authorize_url = we_auth_base.authorize_url
except Exception as e:
logger.error(e)
return redirect(reverse('login') + '?force=1')
return redirect(authorize_url)
try:
r = we_auth_base.fetch_access_token(code)
except Exception as e:
logger.error(e)
return redirect(reverse('login') + '?force=1')
if r.get('errcode'):
logger.error(r)
return redirect(reverse('login') + '?force=1')

open_id = r.get('openid')
if log_in_with_open_id(request, open_id):
messages.success(request, '登录成功')
return redirect(next)
else:
return redirect(reverse('login') + '?force=1')
ossicee
2017-11-07 09:57:03 +08:00
@SingeeKing 谢谢
ossicee
2017-11-07 09:57:25 +08:00
@chengxiao 谢谢您
ossicee
2017-11-07 09:57:36 +08:00
@Marmot 谢谢
ossicee
2017-11-07 09:57:52 +08:00
@haonan3344 不是工作,就是想学习一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/403865

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX