whyounes / laravel-passwordless-auth
Laravel 的无密码认证
v1.1
2016-11-24 18:51 UTC
Requires
- php: ^5.5.9 || ^7.0
- illuminate/config: 5.1.* || 5.2.* || 5.3.*
- illuminate/database: 5.1.* || 5.2.* || 5.3.*
- illuminate/events: 5.1.* || 5.2.* || 5.3.*
Requires (Dev)
- mockery/mockery: ~0.9.4
- orchestra/testbench: ~3.0
- phpunit/phpunit: ^4.8 || ^5.0
This package is auto-updated.
Last update: 2024-08-29 04:25:30 UTC
README
Laravel 5 的无密码认证
安装
使用 Composer 将包添加到您的项目中
composer require whyounes/laravel-passwordless-auth
发布包资源
php artisan vandor:publish
运行迁移以创建令牌表
php artisan migrate
将其添加到您的提供者列表中
// config/app.php // ... 'providers' => [ // ... Whyounes\Passwordless\Providers\PasswordlessProvider::class, };
将 Passwordless
特性添加到您的用户模型中
// app/User.php class User extends Authenticatable { use Whyounes\Passwordless\Traits\Passwordless; // ... }
配置
如果您不想使用用户电子邮件与令牌一起使用,您可以覆盖以下方法来更改它
// app/User.php class User extends Authenticatable { use Whyounes\Passwordless\Traits\Passwordless; // ... protected function getIdentifierKey() { return 'email'; } }
您可以在 config/passwordless.php
文件中更改过期时间
// config/passwordless.php return [ 'expire_in' => 15, // Minutes 'empty_tokens_after_login' => true // Empty user tokens after login ];
如果您不想从数据库中删除未使用的令牌,可以将 empty_tokens_after_login
配置设置为 false。
示例
显示登录表单让用户输入电子邮件
// routes/web.php Route::post('/login/direct', function() { return view('login.direct'); });
捕获表单提交
// routes/web.php Route::post('/login/direct', function(Request $request) { // send link to user mail $user = App\User::where('email', $request->get('email'))->first(); if (!$user) { return redirect()->back(404)->with('error', 'User not found'); } // generate token and save it $token = $user->generateToken(true); // send email to user \Mail::send("mails.login", ['token' => $token], function($message) use($token) { $message->to($token->user->email); }); });
捕获登录链接请求
// routes/web.php Route::get('/login/{token}', function(Request $request, $token) { $user = App\User::where('email', $request->get('email'))->first(); if (!$user) { dd('User not found'); } if($user->isValidToken($token)) { // Login user Auth::login($user); } else { dd("Invalid token"); } });
或者,如果您喜欢处理异常
// routes/web.php Route::get('/login/{token}', function(Request $request, $token) { try { $user = App\User::where('email', $request->get('email'))->firstOrFail(); $user->validateToken($token); Auth::login($user); } catch(Illuminate\Database\Eloquent\ModelNotFoundException $ex) { dd('User not found'); } catch(Whyounes\Passwordless\Exceptions\InvalidTokenException $ex) { dd("Invalid token"); } });