学习不久Laravel,碰壁非常多,整理一些 Auth组件上的理解,并重写Auth组件密码认证方式为MD5加密的一些调试过程,分享给其他初学Laravel的用户。
需求说明
由于项目是一个老项目,需要将部分数据直接迁移到新项目中直接使用,包括数据库的一些设计需要继续沿用。所以能改动的只有代码逻辑部分。
用户表:uc_user
加密方式 : md5
密码字段:user_pass
Auth::attempt 校验并登录
Auth::once 校验不登录,用于一次性授权,类似与api接口的场景
Auth::logout 注销登录的用户
Auth::user 获取已经登录的用户信息
Auth::check 检查用户是否已经登录
以上函数来源于哪里?laravel文档、查阅laravel代码打debug得知。
文件位于:/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php
调试是一件很痛苦的事情,以下是调试完毕整理的过程说明,分享给各位需要用到的朋友。
1.配置数据库账户密码信息
修改根目录下 .env 文件即可,如图,只修改数据库信息即可,其他可默认。
APP_ENV=local
APP_DEBUG=true
APP_KEY=base64:IxkVvrRLqdJeU9h8vGu1W58OG3NVuDtkMWyC6nIT4qs=
APP_URL=http://www.example.com
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=ucenter_example
DB_USERNAME=root
DB_PASSWORD=root
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
2.创建用户控制器,编写测试登录代码。
artisan:
php artisan make:controller UserController
同样也可以手工进行创建文件:/app/Http/Controllers/UserController.php
文件内容如下:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use Auth;
class UserController extends Controller
{
//
public function login(){
$username = request()->get('username');
$password = request()->get('password');
//验证账号密码,postdata数据key为数据库存储字段名。
$postdata = ['user_name' => $username, 'user_pass'=>$password];
$ret = Auth::attempt($postdata);
if($ret){
return 'success';
}
return $username.$password;
}
}
3.增加路由映射
/app/Http/routes.php
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::get('/login', 'UserController@login');
4.测试进行访问
url:http://www.example.com/login?username=ellermister&password=admin888
很明显当前Auth验证生成的SQL语句和我们预想的不太一样。