1、设计一个注册和登录功能,自定义一个登陆验证的控制器,实现正确登陆跳转至欢迎页面,错误登陆跳转至注册页面的基本功能。
时间: 2024-01-21 15:17:23 浏览: 25
首先,需要设计一个用户表,包含以下字段:
- id: 用户ID,自增长;
- username: 用户名,唯一;
- password: 密码,加密存储;
- created_at: 创建时间。
接下来,我们可以使用 Laravel 框架来实现注册和登录功能。
首先,在终端中使用以下命令创建一个新的 Laravel 项目:
```
laravel new registration-login
```
然后,使用以下命令创建一个名为 users 的数据迁移文件:
```
php artisan make:migration create_users_table --create=users
```
在该数据迁移文件中,编写创建 users 表的代码:
```php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('username')->unique();
$table->string('password');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
}
```
接下来,运行迁移命令:
```
php artisan migrate
```
这样就创建了 users 表。
接下来,我们需要创建注册和登录的路由、控制器和视图。
首先,在 `routes/web.php` 文件中添加以下路由:
```php
Route::get('register', 'AuthController@showRegistrationForm')->name('register');
Route::post('register', 'AuthController@register');
Route::get('login', 'AuthController@showLoginForm')->name('login');
Route::post('login', 'AuthController@login');
Route::get('welcome', 'AuthController@welcome')->name('welcome');
```
然后,创建一个名为 `AuthController` 的控制器:
```
php artisan make:controller AuthController
```
在该控制器中,添加以下方法:
```php
use Illuminate\Http\Request;
use App\User;
class AuthController extends Controller
{
public function showRegistrationForm()
{
return view('auth.register');
}
public function register(Request $request)
{
// 验证表单数据
$validatedData = $request->validate([
'username' => 'required|unique:users',
'password' => 'required|min:6',
]);
// 创建用户
$user = User::create([
'username' => $validatedData['username'],
'password' => bcrypt($validatedData['password']),
]);
// 登录用户
auth()->login($user);
// 跳转到欢迎页面
return redirect()->route('welcome');
}
public function showLoginForm()
{
return view('auth.login');
}
public function login(Request $request)
{
// 验证表单数据
$validatedData = $request->validate([
'username' => 'required',
'password' => 'required',
]);
// 尝试登录
if (auth()->attempt($validatedData)) {
// 登录成功
return redirect()->route('welcome');
} else {
// 登录失败
return redirect()->route('login')->withErrors([
'login_failed' => '用户名或密码错误',
]);
}
}
public function welcome()
{
return view('auth.welcome');
}
}
```
在该控制器中,我们使用了 Laravel 内置的验证器来验证表单数据,使用 bcrypt 函数来加密密码。在注册成功后,我们使用 `auth()->login` 函数来登录用户;在登录成功后,我们使用 `auth()->attempt` 函数来尝试登录用户。
接下来,创建一个名为 `register.blade.php` 的视图:
```html
<h1>注册</h1>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form method="post" action="{{ route('register') }}">
@csrf
<div>
<label for="username">用户名</label>
<input type="text" name="username" id="username" value="{{ old('username') }}" required>
</div>
<div>
<label for="password">密码</label>
<input type="password" name="password" id="password" required>
</div>
<button type="submit">注册</button>
</form>
```
在该视图中,我们使用了 Laravel 内置的错误提示功能来显示表单验证错误,并使用 `old` 函数来保留表单中已填写的数据。
接下来,创建一个名为 `login.blade.php` 的视图:
```html
<h1>登录</h1>
@if ($errors->has('login_failed'))
<div class="alert alert-danger">{{ $errors->first('login_failed') }}</div>
@endif
<form method="post" action="{{ route('login') }}">
@csrf
<div>
<label for="username">用户名</label>
<input type="text" name="username" id="username" value="{{ old('username') }}" required>
</div>
<div>
<label for="password">密码</label>
<input type="password" name="password" id="password" required>
</div>
<button type="submit">登录</button>
</form>
```
在该视图中,我们使用了 Laravel 内置的错误提示功能来显示登录失败信息,并使用 `old` 函数来保留表单中已填写的数据。
最后,创建一个名为 `welcome.blade.php` 的视图:
```html
<h1>欢迎</h1>
<p>您已成功登录!</p>
```
在该视图中,我们仅仅显示欢迎信息。
现在,我们已经完成了注册和登录功能的开发。你可以根据自己的需求进行修改和扩展。