Laravel5中集成Jasig cas统一认证系统,laravel5jasig
CAS : CAS(Central Authentication Service)是一款不错的针对 Web 应用的单点登录框架,这里介绍下我刚在laravel5上搭建成功的cas。提前准备工作:可运行的laravel5的工程,cas的服务器端已经存在。
环境:Linux(ubuntu)
一,下载phpcas源代码。
在laravel5的项目app目录下创建library目录,下载phpcas库,git clone https://github.com/Jasig/phpCAS.git,clone下来是一个phpcas的文件目录。
二,创建provider
在app下创建目录cas,创建CasAuthProvider.php,内容如下:
<span> 1</span> <?<span>php </span><span> 2</span> <span> 3</span> <span>namespace cas; </span><span> 4</span> <span> 5</span> <span>use</span><span> Illuminate\Contracts\Auth\UserProvider; </span><span> 6</span> <span>use</span><span> Illuminate\Contracts\Hashing\Hasher; </span><span> 7</span> <span>use</span><span> Illuminate\Contracts\Auth\Authenticatable; </span><span> 8</span> <span>use</span><span> Illuminate\Auth\GenericUser; </span><span> 9</span> <span>10</span> <span>class</span> CasAuthProvider <span>implements</span><span> UserProvider { </span><span>11</span> <span>12</span> <span>/*</span><span>* </span><span>13</span> <span> * Retrieve a user by their unique identifier. </span><span>14</span> <span> * </span><span>15</span> <span> * @param mixed $id </span><span>16</span> <span> * @return \Illuminate\Auth\UserInterface|null </span><span>17</span> <span>*/</span> <span>18</span> <span>public</span> <span>function</span> retrieveById(<span>$id</span><span>) { </span><span>19</span> <span>return</span> <span>$this</span>-><span>casUser(); </span><span>20</span> <span> } </span><span>21</span> <span>22</span> <span>/*</span><span>* </span><span>23</span> <span> * Retrieve a user by the given credentials. </span><span>24</span> <span> * </span><span>25</span> <span> * @param array $credentials </span><span>26</span> <span> * @return \Illuminate\Auth\UserInterface|null </span><span>27</span> <span>*/</span> <span>28</span> <span>public</span> <span>function</span> retrieveByCredentials(<span>array</span> <span>$credentials</span><span>) { </span><span>29</span> <span>return</span> <span>$this</span>-><span>casUser(); </span><span>30</span> <span> } </span><span>31</span> <span>32</span> <span>/*</span><span>* </span><span>33</span> <span> * Validate a user against the given credentials. </span><span>34</span> <span> * </span><span>35</span> <span> * @param \Illuminate\Auth\UserInterface $user </span><span>36</span> <span> * @param array $credentials </span><span>37</span> <span> * @return bool </span><span>38</span> <span>*/</span> <span>39</span> <span>public</span> <span>function</span> validateCredentials(Authenticatable <span>$user</span>, <span>array</span> <span>$credentials</span><span>) { </span><span>40</span> <span>return</span> <span>true</span><span>; </span><span>41</span> <span> } </span><span>42</span> <span>43</span> <span>protected</span> <span>function</span><span> casUser() { </span><span>44</span> <span>$cas_host</span> = \Config::get('app.cas_host'<span>); </span><span>45</span> <span>//</span><span>dump($cas_host);</span> <span>46</span> <span>$cas_context</span> = \Config::get('app.cas_context'<span>); </span><span>47</span> <span>$cas_port</span> = \Config::get('app.cas_port'<span>); </span><span>48</span> \phpCAS::<span>setDebug(); </span><span>49</span> \phpCAS::client(CAS_VERSION_2_0, <span>$cas_host</span>, <span>$cas_port</span>, <span>$cas_context</span><span>); </span><span>50</span> \phpCAS::<span>setNoCasServerValidation(); </span><span>51</span> <span>52</span> <span>if</span> (\phpCAS::<span>isAuthenticated()) { </span><span>53</span> <span>$attributes</span> = <span>array</span><span>( </span><span>54</span> 'id' => \phpCAS::getUser(), <span>55</span> 'name' => \phpCAS::<span>getUser() </span><span>56</span> <span> ); </span><span>57</span> <span>return</span> <span>new</span> GenericUser(<span>$attributes</span><span>); </span><span>58</span> } <span>else</span><span> { </span><span>59</span> <span>//</span><span>\phpCAS::setServerURL(\Config::get('app.url'));</span> <span>60</span> \phpCAS::<span>forceAuthentication(); </span><span>61</span> <span> } </span><span>62</span> <span>return</span> <span>null</span><span>; </span><span>63</span> <span> } </span><span>64</span> <span>65</span> <span>/*</span><span>* </span><span>66</span> <span> * Needed by Laravel 4.1.26 and above </span><span>67</span> <span>*/</span> <span>68</span> <span>public</span> <span>function</span> retrieveByToken(<span>$identifier</span>, <span>$token</span><span>) { </span><span>69</span> <span>return</span> <span>new</span> \<span>Exception</span>('not implemented'<span>); </span><span>70</span> <span> } </span><span>71</span> <span>72</span> <span>/*</span><span>* </span><span>73</span> <span> * Needed by Laravel 4.1.26 and above </span><span>74</span> <span>*/</span> <span>75</span> <span>public</span> <span>function</span> updateRememberToken(Authenticatable <span>$user</span>, <span>$token</span><span>) { </span><span>76</span> <span>return</span> <span>new</span> \<span>Exception</span>('not implemented'<span>); </span><span>77</span> <span> } </span><span>78</span> <span>79</span> <span>} </span><span>80</span> <span>81</span> ?>
三,修改config
在config/app.php中添加如下三个配置项:
'cas_host'=>'****', //认证服务器
'cas_context'=>'',//还没弄明白是什么
'cas_port'=>000,//认证服务端口
'url'=>'http://localhost/',
四,加载认证库
在app/providers/AppServiceProvider.php里,在类AppServiceProvider的register函数里添加认证方式:
Auth::extend('cas', function($app) {
return new CasAuthProvider;
});
修改app/config/auth.php认证driver:'driver' => 'cas',
在composer.json里配置加载项,在autoload里的classmap中添加如下路径:
"autoload": {
"classmap": [
**************
"app/library",
"app/library/phpCAS",
"app/cas"
]
}
在项目根目录下执行:composer dump-autoload
五,实现
在app/http/controllers/下创建CasAuthController.php,添加login和logout方法:
<span> 1</span> <span>public</span> <span>function</span><span> login() { </span><span> 2</span> <span> 3</span> <span>$message_error</span> = ""<span>; </span><span> 4</span> <span>if</span> (Auth::<span>check()) { </span><span> 5</span> <span> 6</span> } <span>else</span><span> { </span><span> 7</span> <span>if</span> (Auth::attempt(<span>array</span><span>())) { </span><span> 8</span> <span>//</span><span> Redirect to link after login</span> <span> 9</span> <span> } </span><span>10</span> <span>//</span><span> Redirect to un-logged in page</span> <span>11</span> <span> } </span><span>12</span> dump(\phpCAS::<span>getUser()); </span><span>13</span> dump(Auth::<span>user()); </span><span>14</span> <span> } </span><span>15</span> <span>16</span> <span>public</span> <span>function</span><span> logout() { </span><span>17</span> <span>18</span> <span>$cas_host</span> = \Config::get('app.cas_host'<span>); </span><span>19</span> <span>//</span><span>dump($cas_host);</span> <span>20</span> <span>$cas_context</span> = \Config::get('app.cas_context'<span>); </span><span>21</span> <span>$cas_port</span> = \Config::get('app.cas_port'<span>); </span><span>22</span> \phpCAS::<span>setDebug(); </span><span>23</span> \phpCAS::client(CAS_VERSION_2_0, <span>$cas_host</span>, <span>$cas_port</span>, <span>$cas_context</span><span>); </span><span>24</span> \phpCAS::<span>setNoCasServerValidation(); </span><span>25</span> \phpCAS::logoutWithRedirectService(\Config::get('app.url'<span>)); </span><span>26</span> }
在routes.php里添加路由规则就OK了,把项目默认的登陆和注销方法指到这里来,当login的时候,会出现服务器的登陆页面。
有个问题,就是这么改动之后,原来我设置的不需要登陆就能浏览的页面,现在进入的时候也会跳出登陆页面,不知道为什么,希望高手指导下,谢谢!
参考:https://sonnguyen.ws/how-to-integrate-phpcas-in-laravel/

想象一下,你正在网上购物,你发现有两家店铺销售同一种商品,它们的评分相同。然而,第一家只有一个人评分,第二家有100人评分。您会更信任哪个评分呢?最终您会选择购买哪家的商品呢?大多数人的答案很简单。100个人的意见肯定比只有一个人的意见更值得信赖。这被称为“群众的智慧”,这也是集成方法有效的原因。集成方法通常,我们只从训练数据中创建一个学习者(学习者=训练模型)(即,我们只在训练数据上训练一个机器学习模型)。而集成方法是让多个学习者解决同一个问题,然后将他们组合在一起。这些学习者被称为基础学习者

随着企业数据变得越来越庞大和复杂,数据处理和分析的需求变得愈发迫切。为了解决这一问题,ETL(抽取、转换、加载)工具逐渐成为了企业数据处理和分析的重要工具。PHP作为一门流行的Web开发语言,也可以通过与ETL工具的集成来提高数据处理和分析的效率和精度。ETL工具介绍ETL工具是一类能够提取数据、进行数据转换,并将数据加载到目标系统中的软件。其全称是抽取-转

Java集成阿里云OSS实现文件上传功能阿里云OSS(ObjectStorageService)是一种简单高效、安全可靠的云存储服务,提供了海量、安全、低成本、高可靠的云存储解决方案。通过使用阿里云OSS,我们可以方便地将文件存储到云端,实现文件的上传、下载、管理等功能。本文将介绍如何使用Java语言集成阿里云OSS,实现文件上传功能。注册阿里云OSS账

Microsoft今天宣布了Dynamics365客户服务中SharePoint与Copilot集成的早期预览版。这种集成将使客户服务代理能够访问更广泛的知识来源,从而提高生产力并改善客户互动。目前,Dynamics365客户服务中的Copilot利用内部知识库为客户服务代理提供指导。通过建议聊天和草稿电子邮件内容,Copilot已成为提高客户服务团队生产力的关键工具。但是,客户反馈表明该工具需要利用来自外部资源(如SharePoint)的知识。SharePoint协同驾驶集成为了响应这些反馈,

WebSocket是一种实时通信的协议,比起HTTP协议更加轻量级和高效,可以实现类似于聊天室、实时通知等功能。在Django中,我们可以通过利用DjangoChannels库将WebSocket集成到框架中,实现实时通信。首先,我们需要安装Django和DjangoChannels库。可以通过pip工具进行安装,也可以使用conda等其他包管理工具。p

如何在Java项目中集成并使用百度AI接口的智能图像识别功能引言:随着人工智能的快速发展,图像识别技术逐渐渗透到各个领域,并提供了许多应用场景。百度AI接口提供了强大的图像识别功能,可以帮助我们在Java项目中实现图像的智能识别。本文将介绍如何在Java项目中集成并使用百度AI接口的智能图像识别功能,并提供相关的代码示例。步骤一:注册百度AI接口账号首先,我

Vue.js与Swift语言的集成,实现高级iOS应用的开发和测试的建议和技术指导引言移动应用的开发和测试是一个复杂而且需要专业技术的领域。两个主要的技术栈分别是前端的Vue.js和iOS平台的Swift语言。本文将介绍如何将Vue.js和Swift语言进行集成,以便开发和测试高级的iOS应用。Vue.js的基本原理和功能Vue.js是一种用于构建用户界面的

随着计算机技术的不断发展,数据边缘计算成为了越来越热门的话题。在这个趋势中,PHP语言也逐渐成为了一个重要的参与者。本文将介绍PHP与数据边缘计算的集成,探讨PHP在边缘计算中的应用。一、什么是数据边缘计算数据边缘计算(EdgeComputing)是一种计算模式,它将计算资源部署到离数据来源最近的地方,以实现更低延迟、更高效率的数据处理。边缘计算的核心是将


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用

SublimeText3 Linux新版
SublimeText3 Linux最新版

記事本++7.3.1
好用且免費的程式碼編輯器

Dreamweaver CS6
視覺化網頁開發工具