在Laravel的认证模块的详细解决方案

在Laravel的认证模块的详细解决方案
前言

本文主要介绍了Laravel认证模块的相关内容,分享出来供大家参考学习。让我们详细介绍一下。

本文是基于laravel 5.4版本的定位模块的代码分析与写作;

模块组成
作者从功能模块分为两个部分:用户认证和授权管理;从文件中,照明 密码认证目录重置密码或忘记密码处理模块、照亮授权负责用户认证和授权管理模块、照亮 认证提供了基础一个特定的逻辑实现登录修改密码,密码重置和柱系统

下面的关系图显示认证模块的各文件之间的关系,给出了一个简短的描述。
用户认证
HTTP本身是无状态的,通常在系统交互的过程中,使用帐户或令牌标识来确定经过身份验证的用户。

配置文件的解释

返回{
默认值{ {
卫兵= >网络

},
守卫{ { {
网络{ {
司机= > 'session,
供应商= > 'users,
},
api{ { {
司机= > 'token,
供应商= > 'users,
},
},
提供者{ {
用户{ {
司机= > 'eloquent,
模型:应用程序用户,
},
},
},
};
从上到下,明白;

提供者是提供数据的用户界面,以标记驱动对象和目标对象;这里是一组密钥,用户提供雄辩驱动程序的名称,模式应用程序用户;
对于认证管理配置保安部;有两种方法,被称为网络,有一个API;Web认证是基于会话交互,根据SessionID用户访问的ID,查看该用户的用户提供者;API认证是基于用户令牌的作用值还可在商;
默认项显示默认使用Web身份验证。
认证
会话绑定身份验证信息:

用于存储身份验证条件的凭据数组,如电子邮件地址用户名和密码
/ / $记得指示是否记得,产生` remember_token `
公共函数尝试(数组$ = {,},$ = false)

公共功能(用户登录authenticatablecontract美元美元,记得= false)

公共功能loginusingid($id,$记得= false)
HTTP基本认证,在认证请求头信息;请求获得通过SessionID后;

公共功能的基础($场= 'email',$出偏= { })
仅在当前会话中进行身份验证,并且不在会话中记录身份验证信息:

公共函数一次(数组$凭据{ })

公共功能onceusingid($id)

公共功能oncebasic($场= 'email',$出偏= { })
在身份验证过程中(包括注册、忘记密码),定义了这些事件。
事件名称
描述

尝试
尝试验证事件
认证
验证通过事件
失败
验证失败的事件
锁定
失败的数量超过了限制,并且通过锁定请求重新访问请求。
逻辑
该事件被称为remember_token成功登录
注销
用户退出事件
注册
用户注册事件
还有一些其他的身份验证方法:

检查是否有认证的用户:认证::检查()
获取当前已通过身份验证的用户:用户认证::()
退出系统:认证::注销()
Cryptographic处理
配置解读

返回{
默认值{ {
密码= > 'users,

},

密码{ {
用户{ {
供应商= > 'users,
桌子= > 'password_resets,
过期= > 60,
},
},
}
从下到上,看看配置;

密码数组是重置密码配置;用户是配置方案的别名,它包含三个元素:提供程序(提供用户计划、上层提供者数组)、表(存储重置密码令牌表)、过期(令牌过期时间)。
默认项设置默认密码重置方案。
重置密码的调用与实现
首先看看laravel重置密码功能的实现。
公共函数重置(数组$凭据,闭包$回调){
验证用户名、密码和令牌是否有效。
用户名=美元-> validatereset(合资格);

如果(!为用户实例canresetpasswordcontract){
返回$用户;
}

密码=美元美元凭据{ 'password};
执行回调函数来修改密码和持久存储。
$回调($用户,密码);
在持久存储保存令牌时删除重置密码
$ >令牌-删除($用户);

返回静态::password_reset;
}
看看如何重置密码模块的基础认证模块的封装称为。
用于重新设置密码API
公共函数重置(请求$请求){
/ /验证请求参数表征,电子邮件,密码,password_confirmation
美元->验证(要求美元,美元->规则()(),美元-> validationerrormessages());
方法调用密码重置,第二个参数是回调,做一些存储工作
$响应= $
此凭证($请求)、函数($用户、密码){
美元-> ResetPassword(用户名,密码,美元);
}
);
响应包
返回的响应:password_reset =密码:
美元-> sendresetresponse(合反应
美元-> sendresetfailedresponse(合要求,为响应);
}

当请求参数重置密码时
保护的函数凭据(请求$请求){
仅返回$请求>
电子邮件,'password ','password_confirmation ','token
);
}

在继续工作后验证密码重置的真实性。
保护功能(用户名、密码ResetPassword美元){
/ /更改密码,生成remember_token
为用户-> Forcefill({
密码= BCrypt($密码),
remember_token= >乙方:(60):随机,
)>保存();
会话用户的信息也重新分配。
$ >守护()-登录($用户);
}
忘记密码密码重置的全部过程:

点击忘记密码,通过路由配置,跳转到忘记密码页面,页面必须发送邮箱才能填写此字段。
验证发送的邮箱是否存在于数据库中,如果存在,则将一个重置密码邮件发送到邮箱。
在重置密码中有一个链接,它在单击后会为修改后的密码页提供令牌。同时,该数据库将保存散列加密值的令牌。
填写邮箱、密码和确认密码的三个字段后,携带令牌访问重置密码API,首页确定邮箱、密码和确认密码的三个字段,然后验证令牌是否有效;如果是,则成功重置它。
权限管理
权限管理是由数组变量能力维护的,它依赖于内存空间的维护,结构如下:
能力=数组(
动作的定义,如路由为(普通的仪表板列表)函数($用户)= {
方法参数,第一个参数是$,用户可以在参数后面决定。
返回true;返回意味着权限,未经许可的虚假手段
},
......
);
但是,只有使用$能力,定义的代码部分将以相同的方式集中,因此有一个策略策略类。

策略策略类定义了一组实体和实体权限类的对应关系,例如一个文章的示例:

有一类称为模态实体后,它定义了一个实体类postpolicy特权阶级,并定义了一些行为在权限类的方法名。
类postpolicy {
更新权限,作者可以修改
公共功能更新(用户$,POST $ POST){
返回用户-> ID = $post -> user_id;
}
}
服务提供者并登记,以便系统知道,如果你想检查班后的对象,再加上动作的名称给你,系统会找到postpolicy类的相应方法。
受保护的$策略= {
职务::班级:班= > PostPolicy,
};
你怎么称呼它

对于权限数组中定义的权限:

当前用户没有common.dashboard.list权利:门::允许(普通。仪表板。列表)
当前用户是否有权限common.dashboard.list:!门::否认(普通。仪表板。列表)
当前用户是否有权限要求:common.dashboard.list美元->用户()->可以(普通。仪表板。列表)
当前用户是否有权限common.dashboard.list:!要求美元->用户()->不能(普通。仪表板。列表)
指定用户是否common.dashboard.list特权:门::用户(用户名)->允许(普通。仪表板。列表)
策略策略类调用的权限:

当前用户是否可以修改文章(门电话):门::允许(更新,$ POST)
当前用户是否可以修改文章(用户):用户->可以美元(更新,$ POST)
当前用户是否可以修改文章(使用帮助函数):策略($ POST)>更新(用户$,POST)
当前用户是否可以修改文章(在控制器类中的方法称为):美元->授权(更新,$ POST);
当前用户是否可以修改文章(以相同的名称方法调用控制器类);
指定用户是否可以修改文章(在控制器类中的方法调用):美元-> authorizeforuser($用户,更新,$ POST);
有用的技能
访问当前系统注册权限,包括两部分的能力和策略数组内容,代码如下:
元门= APP( auth说明合同访问门::类);
reflection_gate美元=新reflectionclass(合门);

美元美元政策reflection_gate -> getProperty('policies);
美元政策-> setAccessible(true);
获取当前已注册的策略数组
转储(美元政策-> getValue(合门));

能力=美元美元reflection_gate -> getProperty('abilities);
$能力-> setAccessible(true);
获取当前已注册的能力数组
转储(合能力-> GetValue(合门));
总结

以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一定的帮助。如果有任何疑问,您可以留言交流,谢谢您的支持

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部