Coder之路 / PHP 编程 / 推荐 · 2015/01/25 0

Laravel 4 自定义用户登陆.

已经用了一段时间的 Laravel 了, 已经有点脑残粉的倾向了, 哈哈哈
再来谈谈 Laravel 松散设计的好处吧, 今天做用户登陆真的给我爽到了.

比如 Laravel 里的登录可以通过 Auth::attempt() 实现:

1. 如果你使用的加密方法与 Laravel 默认的不一样怎么办?

1) 写个加密器, 实现 Illuminate\Hashing\HasherInterface 接口的 make(实现加密), check(加密校验), needsRehash(是否重新生成) 三个方法.

2) 写个 Service Provider, 继承 Illuminate\Support\ServiceProvider, 用于注册服务.

3) 修改配置 config -> app.php -> providers 替换 Illuminate\Hashing\HashServiceProvider 为你的 HashServiceProvider.

2. 登陆完成 默认 session 里只存了 user 的 id.
获取用户的信息怎么办?

a. 使用 Auth::user()->xxx, Laravel 会默认帮你到数据库里获取.

如果不想查询数据库, 只想从 session 中获取怎么办? 通过监听事件解决:

<?php
//listen auth login action
Event::listen('auth.login', function() {
    $user = Auth::user();
    Session::put('name', $user->name);
    Session::put('email', $user->email);
});
//listen auth logout action
Event::listen('auth.logout', function() {
    Session::clear();
});

Laravel 在执行登录和登出的时候, 已经触发过登录和登出事件了.

诸如上述的设计, 有什么好处? 好处太明显了, 我只要关注我需要改动的地方就可以了, 其他方面框架都帮你解决了.这样可以实现代码的最大化公用.

再说回来, 如果框架代码本身耦合度太高的话, 实现这些东西比较麻烦, 因为逻辑和业务分离太麻烦, 造成的问题是, 很多情况下如果你要修改代码可能需要重写整个方法, 同时还得在方法中重载父类的方法.