Laravel 微信小程序后端实现用户登录的示例代码
这篇文章主要介绍了Laravel 微信小程序后端实现用户登录的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
接上篇微信小程序后端搭建:分享:Laravel 微信小程序后端搭建
后端搭建好后第一件事就是用户登录认证,简单实现微信小程序登录认证
1.user 模型
use Laravel\Passport\HasApiTokens; 新增
use HasApiTokens, Notifiable; protected $fillable = [ ‘id’, ‘name’, ‘email’, ‘email_verified_at’, ‘username’, ‘phone’, ‘avatar’,//我用来把微信头像的/0清晰图片,存到又拍云上 ‘weapp_openid’, ‘nickname’, ‘weapp_avatar’, ‘country’, ‘province’, ‘city’, ‘language’, ‘location’, ‘gender’, ‘level’,//用户等级 ‘is_admin’,//is管理员 ];
2. 新增一条路由
//前端小程序拿到的地址:https://域名/api/v1/自己写的接口 Route::group([‘prefix’ => ‘/v1’], function () { Route::post(‘/user/login’, ‘UserController@weappLogin’); });
3. 在 UserController 控制器里新建 function weappLogin (),别忘了 use 这些
use App\User; use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage;
写两个 function weappLogin (),avatarUpyun ()
public function weappLogin(Request $request) { $code = $request->code; // 根据 code 获取微信 openid 和 session_key $miniProgram = \EasyWeChat::miniProgram(); $data =
m
i
n
i
P
r
o
g
r
a
m
−
>
a
u
t
h
−
>
s
e
s
s
i
o
n
(
miniProgram->auth->session(
miniProgram−>auth−>session(code); if (isset($data[‘errcode’])) { return $this->response->errorUnauthorized(‘code已过期或不正确’); } $weappOpenid = $data[‘openid’]; $weixinSessionKey = $data[‘session_key’]; $nickname = $request->nickname; $avatar = str_replace(‘/132’, ‘/0’, $request->avatar);//拿到分辨率高点的头像 $country =
r
e
q
u
e
s
t
−
>
c
o
u
n
t
r
y
?
request->country?
request−>country?request->country:‘’; $province =
r
e
q
u
e
s
t
−
>
p
r
o
v
i
n
c
e
?
request->province?
request−>province?request->province:‘’; $city =
r
e
q
u
e
s
t
−
>
c
i
t
y
?
request->city?
request−>city?request->city:‘’; $gender = $request->gender == ‘1’ ? ‘1’ : ‘2’;//没传过性别的就默认女的吧,体验好些 $language =
r
e
q
u
e
s
t
−
>
l
a
n
g
u
a
g
e
?
request->language?
request−>language?request->language:‘’; //找到 openid 对应的用户 $user = User::where(‘weapp_openid’,
w
e
a
p
p
O
p
e
n
i
d
)
−
>
f
i
r
s
t
(
)
;
/
/
没有,就注册一个用户
i
f
(
!
weappOpenid)->first(); //没有,就注册一个用户 if (!
weappOpenid)−>first();//没有,就注册一个用户if(!user) { $user = User::create([ ‘weapp_openid’ => $weappOpenid, ‘weapp_session_key’ => $weixinSessionKey, ‘password’ => $weixinSessionKey, ‘avatar’ =>
r
e
q
u
e
s
t
−
>
a
v
a
t
a
r
?
request->avatar?
request−>avatar?this->avatarUpyun($avatar):‘’, ‘weapp_avatar’ => $avatar, ‘nickname’ => $nickname, ‘country’ => $country, ‘province’ => $province, ‘city’ => $city, ‘gender’ => $gender, ‘language’ => $language, ]); } //如果注册过的,就更新下下面的信息 $attributes[‘updated_at’] = now(); $attributes[‘weixin_session_key’] = $weixinSessionKey; $attributes[‘weapp_avatar’] =
a
v
a
t
a
r
;
i
f
(
avatar; if (
avatar;if(nickname) { $attributes[‘nickname’] = KaTeX parse error: Expected 'EOF', got '}' at position 11: nickname; }̲ if (request->gender) { $attributes[‘gender’] = $gender; } // 更新用户数据
u
s
e
r
−
>
u
p
d
a
t
e
(
user->update(
user−>update(attributes); // 直接创建token并设置有效期 $createToken =
u
s
e
r
−
>
c
r
e
a
t
e
T
o
k
e
n
(
user->createToken(
user−>createToken(user->weapp_openid);
c
r
e
a
t
e
T
o
k
e
n
−
>
t
o
k
e
n
−
>
e
x
p
<
b
s
t
y
l
e
=
"
c
o
l
o
r
:
t
r
a
n
s
p
a
r
e
n
t
"
>
来源
g
a
o
@
d
a
i
!
m
a
.
c
o
m
搞
createToken->token->exp<b style="color:transparent">来源gao@dai!ma.com搞
createToken−>token−>exp<bstyle="color:transparent">来源gao@dai!ma.com搞代^码网ires_at = Carbon::now()->addDays(30); $createToken->token->save(); $token = $createToken->accessToken; return response()->json([ ‘access_token’ => $token, ‘token_type’ => “Bearer”, ‘expires_in’ => Carbon::now()->addDays(30), ‘data’ => KaTeX parse error: Expected 'EOF', got '}' at position 16: user, ], 200); }̲ //我保存到又拍云了,版权归…avatar) {
a
v
a
t
a
r
f
i
l
e
=
f
i
l
e
g
e
t
c
o
n
t
e
n
t
s
(
avatarfile = file_get_contents(
avatarfile=filegetcontents(avatar);
f
i
l
e
n
a
m
e
=
′
a
v
a
t
a
r
s
/
′
.
u
n
i
q
i
d
(
)
.
′
.
p
n
g
−
60
0
′
;
/
/
微信的头像链接我也不知道怎么获取后缀,直接保存成
p
n
g
的了
S
t
o
r
a
g
e
:
:
d
i
s
k
(
′
u
p
y
u
n
′
)
−
>
w
r
i
t
e
(
filename = 'avatars/' . uniqid() . '.png-600';//微信的头像链接我也不知道怎么获取后缀,直接保存成png的了 Storage::disk('upyun')->write(
filename=′avatars/′.uniqid().′.png−600′;//微信的头像链接我也不知道怎么获取后缀,直接保存成png的了Storage::disk(′upyun′)−>write(filename, $avatarfile); $wexinavatar = config(‘filesystems.disks.upyun.protocol’) . ‘😕/’ . config(‘filesystems.disks.upyun.domain’) . ‘/’ . $filename; return $wexinavatar;//返回链接地址 }
微信的头像 / 0
小头像默认 / 132
{ “pages”: [ “pages/index/index”, “pages/auth/auth”,//做一个登录页面 “pages/logs/logs” ], “window”: { “backgroundTextStyle”: “light”, “navigationBarBackgroundColor”: “#fff”, “navigationBarTitleText”: “WeChat”, “navigationBarTextStyle”: “black” }, “sitemapLocation”: “sitemap.json”, “permission”: { “scope.userLocation”: { “desc”: “你的位置信息将用于小程序位置接口的效果展示” } } }
5. 打开 auth.js
const app = getApp(); Page({ /** * 页面的初始数据 / data: { UserData: [], isClick: false, }, /* * 生命周期函数–监听页面加载 */ onLoad: function(options) { }, login: function(e) { let that=this that.setData({ isClick: true }) wx.getUserInfo({ lang: “zh_CN”, success: response => { wx.login({ success: res => { let data = { code:res.code, nickname: response.userInfo.nickName, avatar: response.userInfo.avatarUrl, country: response.userInfo.country ? response.userInfo.country : ‘’, province: response.userInfo.province ? response.userInfo.province : ‘’, city: response.userInfo.city ? response.userInfo.city : ‘’, gender: response.userInfo.gender ? response.userInfo.gender : ‘’, language: response.userInfo.language ? response.userInfo.language : ‘’, } console.log(data) app.globalData.userInfo = data; wx.request({ url: ‘你的后端地址’,//我用的valet,http://ak.name/api/v1/user/login method: ‘POST’, data: data, header: { ‘Content-Type’: ‘application/x-www-form-urlencoded’ }, success: function (res) { console.log(res) if (res.statusCode != ‘200’) { return false; } wx.setStorageSync(‘access_token’, res.data.access_token) wx.setStorageSync(‘UserData’, res.data.data ? res.data.data : ‘’) wx.redirectTo({ url: ‘/pages/index/index’, }) }, fail: function (e) { wx.showToast({ title: ‘服务器错误’, duration: 2000 }); that.setData({ isClick: false }) }, }); } }) }, fail: function (e) { that.setData({ isClick: false }) }, }) } })
6. 打开 auth.wxml
微信登录
以上就是Laravel 微信小程序后端实现用户登录的示例代码的详细内容,更多请关注gaodaima搞代码网其它相关文章!
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur
我在新的Debian6VirtualBoxVM上安装RVM时遇到问题。我已经安装了所有需要的包并使用下载了安装脚本(curl-shttps://rvm.beginrescueend.com/install/rvm)>rvm,但以单个用户身份运行时bashrvm我收到以下错误消息:ERROR:Unabletocheckoutbranch.安装在这里停止,并且(据我所知)没有安装RVM的任何文件。如果我以root身份运行脚本(对于多用户安装),我会收到另一条消息:Successfullycheckedoutbranch''安装程序继续并指示成功,但未添加.rvm目录,甚至在修改我的.bas