lumen登陆 注册 API实例

一、准备工作

1、Lumen环境搭建

可参考上篇文章《Lumen安装配置使用入门》一文。

 

2、数据库信息

数据库地址:localhost

数据库名称:lumenauth

数据库用户:root

数据库密码:******

 

二、初始化Lumen

lumen new LumenAuth

三、配置

1、数据库配置

在命令行进入项目所在文件夹,执行命令:

copy .env.example .env

用文本编辑器打开.env文件,根据之前准备的数据库信息作相应修改。

---------------------------------------LumenAuth\.env---------------------------------------APP_ENV=localAPP_DEBUG=trueAPP_KEY=DB_CONNECTION=mysqlDB_HOST=localhostDB_PORT=3306DB_DATABASE=lumenauthDB_USERNAME=rootDB_PASSWORD=CACHE_DRIVER=memcachedQUEUE_DRIVER=sync---------------------------------------

2、认证及修改生效配置

打开项目文件夹LumenAuth\bootstrap\app.php文件,我们将在这里作几处修改。

(1)配置修改生效设置

首先,把以下两行代码取消注释,让数据库信息和认证服务修改可以生效。

 $app->withFacades();$app->withEloquent();

(2)认证中间件注册

参照LumenAuth\bootstrap\app.php文件中”Register Middleware” 部分的中间件注册代码,在它下面注册一个认证路由中间件,这个路由中间件需要我们后面在LumenAuth\app\Http\Middleware文件夹中自定义,我们这里先做配置,后面进行代码实现。注册中间件使用以下代码:

 $app->routeMiddleware(['authToken' => App\Http\Middleware\AuthToken::class,]);

(3)开启注册服务提供者

认证中间件的生效还需要注册服务提供者支持,在LumenAuth\bootstrap\app.php文件下面把以下两行代码的注释去掉即可开启注册服务提供者:

 $app->register(App\Providers\AppServiceProvider::class);$app->register(App\Providers\AuthServiceProvider::class);

最后,LumenAuth\bootstrap\app.php文件有效代码如下:

 ---------------------------------------LumenAuth\bootstrap\app.php---------------------------------------load();} catch (Dotenv\Exception\InvalidPathException $e) {//}$app = new Laravel\Lumen\Application(realpath(__DIR__.'/../'));$app->withFacades();$app->withEloquent();$app->singleton(Illuminate\Contracts\Debug\ExceptionHandler::class,App\Exceptions\Handler::class);$app->singleton(Illuminate\Contracts\Console\Kernel::class,App\Console\Kernel::class);$app->routeMiddleware(['authToken' => App\Http\Middleware\AuthToken::class,]);$app->register(App\Providers\AppServiceProvider::class);$app->register(App\Providers\AuthServiceProvider::class);$app->group(['namespace' => 'App\Http\Controllers'], function ($app) {require __DIR__.'/../app/Http/routes.php';});return $app;

四、用户登录认证案例需求及逻辑

本来这部分应该放在第一部分,但是由于这部分与下面几部分关系比较紧密,因此放在这里一起。

这个案例要实现用户注册、登录和获取用户信息三个功能。

1、用户注册

后端接收用户附加用户信息(用户名、用户密码和邮箱)的请求后:

(1)判断信息是否完整,如信息完整则进行下一步写入数据库阶段,如果信息完整并成功写入数据库,则返回“用户注册成功!”信息,否则返回“用户注册失败!”;

(2)如果信息不完整,不用操作数据库,直接返回“请输入完整用户信息!”提示信息。

(3)用户密码处理:使用sha1加密方式并附加一个随机自定义字符。

 

2、用户登录

(1)把用户登录和用户信息请求分开,用户登录功能只是为了获取一个可以请求获取用户信息的Token,而且每次用户登录成功后都会随机改变Token值并更新数据库中的Token。

(2)如果要获取用户信息,需要根据登录成功后返回的Token另外单独请求专门获取用户信息的API,核对Token值与数据库保存的Token值后返回结果。

(3)用户登录成功后返回用户最新Token;登录失败返回“用户名或密码不正确,登录失败!”;登录信息不完整返回“登录信息不完整,请输入用户名和密码登录!”。

 

3、获取用户信息

(1)根据用户Token验证返回用户信息;

(2)使用Header包含Token形式附带Token;

 

五、数据库模型及数据表建立

1、建立数据模型

通过以上分析,可以建立基本的数据模型,这里只要用一张用户表格就行了,用户表结构如下:

-------------------------------------------------字段         |  类型          |  其它-------------------------------------------------id           |  int(10)      |  AUTO_INCREMENT-------------------------------------------------username     |  varchar(255) |-------------------------------------------------password     |  varchar(255) |-------------------------------------------------email        |  varchar(255) |-------------------------------------------------api_token    |  varchar(60)  |  UNIQUE-------------------------------------------------created_at   |  timestamp    |-------------------------------------------------updated_at   |  timestamp    |-------------------------------------------------

2、创建用户数据模式迁移

php artisan make:migration create_users_table --create=users

 

3、定义数据表结构

编辑LumenAuth\database\migrations\文件夹下的*_create_users_table.php文件

---------------------------------------LumenAuth\database\migrations\*_create_users_table.php---------------------------------------increments('id');$table->string('username');$table->string('password');$table->string('email');$table->string('api_token', 60)->unique();$table->timestamps();});}public function down(){Schema::drop('users');}}

4、创建用户数据模型

如果你的项目文件夹LumenAuth\app\文件夹下没有User.php文件,那么新建一个User.php文件,文件内容如下:

 ---------------------------------------LumenAuth\app\User.php---------------------------------------

六、路由定义

定义下面三个路由,用于实现用户注册、登录及获取用户信息。

 ------------------------------------------------------------------序号 | 路由类型 |   路由路径      | 路由控制器------------------------------------------------------------------1    |   POST  | users/login    | UserController@login------------------------------------------------------------------2    |   POST  | users/register | UserController@register------------------------------------------------------------------3    |   GET   | users/info     | UserController@info------------------------------------------------------------------

根据上表在LumenAuth\app\Http\routes.php中定义路由:

---------------------------------------LumenAuth\app\Http\routes.php---------------------------------------get('/', function () use ($app) {return $app->version();});$app->post('users/login', 'UserController@login');$app->post('users/register', 'UserController@register');$app->get('users/info', ['middleware' => 'authToken','uses' => 'UserController@info']);

七、Controller逻辑

在LumenAuth\app\Http\Controllers\文件夹下新建用户控制器UserController.php,实现用户注册、登录和用户信息获取功能。

 ---------------------------------------LumenAuth\app\Http\Controllers\Controller.php---------------------------------------salt="userloginregister";}public function login(Request $request){if ($request->has('username') && $request->has('password')) {$user = User:: where("username", "=", $request->input('username'))->where("password", "=", sha1($this->salt.$request->input('password')))->first();if ($user) {$token=str_random(60);$user->api_token=$token;$user->save();return $user->api_token;} else {return "用户名或密码不正确,登录失败!";}} else {return "登录信息不完整,请输入用户名和密码登录!";}}public function register(Request $request){if ($request->has('username') && $request->has('password') && $request->has('email')) {$user = new User;$user->username=$request->input('username');$user->password=sha1($this->salt.$request->input('password'));$user->email=$request->input('email');$user->api_token=str_random(60);if($user->save()){return "用户注册成功!";} else {return "用户注册失败!";}} else {return "请输入完整用户信息!";}}public function info(){return Auth::user();}}

八、认证服务

必须要通过token验证才能获取用户信息。在LumenAuth\app\Http\Providers\AuthServiceProvider.php中定义验证服务。我们使用header包含token的形式来验证。修改LumenAuth\app\Http\Providers\AuthServiceProvider.php文件代码。

---------------------------------------LumenAuth\app\Http\Providers\AuthServiceProvider.php---------------------------------------app['auth']->viaRequest('api', function ($request) {if ($request->header('api_token')) {return User:: where('api_token', '=', $request->header('api_token'))->first();}});}}

九、定义认证中间件

在LumenAuth\app\Http\Middleware\文件夹下定义认证路由中间件AuthToken.php,就是之前在路由中定义的”authToken”。

---------------------------------------
LumenAuth\app\Http\Middleware\AuthToken.php
---------------------------------------

十、测试使用

1、用户注册

register_success

 

2、用户登录

login_success

login_token

用户登录成功后,数据库的api_token也会进行更新。

 

3、获取用户信息

user_info

完整源码:https://github.com/yaoyonstudio/Lumen-User-Login-Register.git 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章