laravel 实现登录注册

来源:undefined 2025-01-03 02:48:44 1032

laravel 是一种流行的 php 框架,它提供了一个强大的开发环境,可以让您更容易地构建 web 应用程序。其中一个重要的特性是 laravel 自带的身份验证系统,可以让您快速实现用户认证,包括登录和注册。在本文中,我们将演示如何使用 laravel 实现登录注册。

部署环境

在开始实现身份验证之前,我们需要确保 Laravel 环境已经配置好并且数据库连接已经配置。如果您还没有安装 Laravel,可以参考官方文档中的安装指南。在 Laravel 应用程序中,我们使用 Artisan 命令行工具创建必要的文件和目录结构。在命令行中,我们可以使用以下命令创建新的 Laravel 应用程序:

composer create-project --prefer-dist laravel/laravel blog

创建之后,导航到应用程序的根目录,运行以下命令生成应用程序密钥:

php artisan key:generate

首先,我们需要定义发送 POST 请求到 /register 的路由,并将其绑定到 RegisterController 的 register() 方法。这将呈现一个注册表单,用户可以填写其用户名和密码。

Route::post(/register, AuthRegisterController@register)->name(register);

接下来,我们需要定义发送 POST 请求到 /login 的路由,并将其绑定到 LoginController 的login() 方法。这将呈现一个登录表单,用户可以填写登录名和密码。如果用户没有有效的凭据进行验证,则应用程序会重定向到登录表单。

Route::post(/login, AuthLoginController@login)->name(login);

最后,我们需要定义所有受保护的路由。在 Laravel 中,我们可以使用 auth 中间件来确保用户已经通过身份验证。这个中间件将自动重定向未经验证的用户到 /login 路由。

Route::middleware([auth])->group(function () {

1

// your protected routes go here

登录后复制

});

处理控制器

我们已经定义了必要的路由,现在需要在控制器中处理它们。在 Laravel 中,控制器是处理特定 HTTP 请求的类,控制器中的方法返回 HTTP 响应。在应用程序中,我们需要创建两个控制器用于处理注册和登录请求。

在 app/Http/Controllers/Auth 目录下,创建 LoginController.php 和 RegisterController.php 两个文件,这两个文件是 Laravel 自带的控制器类。在这些控制器中,我们需要覆盖 Laravel 的默认方法,为登录和注册请求提供自定义的功能。

登录控制器

我们首先来看 LoginController.php 控制器。此控制器包含两个方法:showLoginForm() 和 login()。

showLoginForm() 方法返回登录表单视图(resources/views/auth/login.blade.php),该视图包含一个表单,用户可以输入登录名和密码。这个方法是由 Laravel 所提供的。

public function showLoginForm()

{

1

return view(auth.login);

登录后复制

}

login() 方法是真正实现登录逻辑的地方。这个方法接收一个 IlluminateHttpRequest 实例,并使用该实例的 validate() 方法验证用户输入。如果表单验证成功,Laravel 将自动搜索使用给定登录名和密码的用户,并将其登录到应用程序中。

public function login(Request $request)

{

1

2

3

4

5

6

7

8

9

10

11

12

13

$request->validate([

email => required|string|email,

password => required|string,

remember => boolean

]);

$credentials = $request->only(email, password);

if (Auth::attempt($credentials, $request->remember)) {

return redirect()->intended(dashboard);

}

return redirect()->back()->withInput($request->only(email, remember));

登录后复制

}

注意,attempt() 方法将根据给定的凭据来自动检查密码是否正确。如果密码不正确,则会返回 false。

如果用户已经成功验证,并且他们之前请求的 URL 被存储起来(通常指被 auth 中间件阻止的URL),我们可以使用 Laravel 辅助函数 intended() 来将其重定向到该 URL。如果未存储任何 URL,则重定向到前端控件台(/dashboard)。

注册控制器

接下来我们来看 RegisterController.php 控制器。除了 Laravel 的默认方法之外,我们还需要实现 register() 方法。

register() 方法非常类似于 login() 方法。它接收一个 IlluminateHttpRequest 实例,并使用该实例的 validate() 方法验证用户输入。如果表单验证成功,Laravel 将创建一个新用户,并将其保存到数据库中。然后,我们可以使用 Laravel 的默认行为将用户登录到应用程序中。

public function register(Request $request)

{

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

$request->validate([

name => required|string|max:255,

email => required|string|email|max:255|unique:users,

password => required|string|min:6|confirmed,

]);

$user = User::create([

name => $request->name,

email => $request->email,

password => Hash::make($request->password),

]);

Auth::login($user);

return redirect()->intended(dashboard);

登录后复制

}

在注册控制器中我们可以使用 Hash 辅助函数来对密码进行加密。如果密码验证成功,我们将创建新用户并将其登录到应用程序中。

视图层

现在我们已经定义了必要的路由和控制器,接下来需要创建身份验证视图。

在 resources/views/auth 目录中,我们可以创建 login.blade.php 和 register.blade.php 两个视图文件。这些视图包含登录和注册表单,使用了一些 Laravel 帮助程序,可以处理表单验证并显示错误消息。

登录视图

在 login.blade.php 文件中,我们可以使用 Laravel 的 Form 辅助函数创建登录表单。这个函数会自动为表单添加 CSRF 令牌,并为输入字段编写 HTML 标记。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

@csrf

<div class="form-group row">

<label for="email" class="col-sm-4 col-form-label text-md-right">{{ __(Email Address) }}</label>

<div class="col-md-6">

<input id="email" type="email" class="form-control{{ $errors-&gt;has(email) ? is-invalid : }}" name="email" value="{{ old(email) }}" required autofocus>

@if ($errors-&gt;has(email))

<span class="invalid-feedback" role="alert">

<strong>{{ $errors-&gt;first(email) }}</strong>

</span>

@endif

</div>

</div>

<div class="form-group row">

<label for="password" class="col-md-4 col-form-label text-md-right">{{ __(Password) }}</label>

<div class="col-md-6">

<input id="password" type="password" class="form-control{{ $errors-&gt;has(password) ? is-invalid : }}" name="password" required>

@if ($errors-&gt;has(password))

<span class="invalid-feedback" role="alert">

<strong>{{ $errors-&gt;first(password) }}</strong>

</span>

@endif

</div>

</div>

<div class="form-group row">

<div class="col-md-6 offset-md-4">

<div class="form-check">

<input class="form-check-input" type="checkbox" name="remember" id="remember" old :><label class="form-check-label" for="remember">

{{ __(Remember Me) }}

</label>

</div>

</div>

</div>

<div class="form-group row mb-0">

<div class="col-md-8 offset-md-4">

<button type="submit" class="btn btn-primary">

{{ __(Login) }}

</button>

@if (Route::has(password.request))

<a class="btn btn-link" href="%7B%7B%20route(password.request)%20%7D%7D">

{{ __(Forgot Your Password?) }}

</a>

@endif

</div>

</div>

登录后复制

注意,我们使用了 Blade 模板引擎的 @csrf 和 @if 语句来生成必要的 CSRF 令牌并显示验证错误。

注册视图

在 register.blade.php 文件中,我们可以使用 Laravel 的 Form 帮助器创建注册表单。这个函数自动为表单添加 CSRF 令牌,并为输入字段编写 HTML 标记。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

@csrf

<div class="form-group row">

<label for="name" class="col-md-4 col-form-label text-md-right">{{ __(Name) }}</label>

<div class="col-md-6">

<input id="name" type="text" class="form-control{{ $errors-&gt;has(name) ? is-invalid : }}" name="name" value="{{ old(name) }}" required autofocus>

@if ($errors-&gt;has(name))

<span class="invalid-feedback" role="alert">

<strong>{{ $errors-&gt;first(name) }}</strong>

</span>

@endif

</div>

</div>

<div class="form-group row">

<label for="email" class="col-md-4 col-form-label text-md-right">{{ __(E-Mail Address) }}</label>

<div class="col-md-6">

<input id="email" type="email" class="form-control{{ $errors-&gt;has(email) ? is-invalid : }}" name="email" value="{{ old(email) }}" required>

@if ($errors-&gt;has(email))

<span class="invalid-feedback" role="alert">

<strong>{{ $errors-&gt;first(email) }}</strong>

</span>

@endif

</div>

</div>

<div class="form-group row">

<label for="password" class="col-md-4 col-form-label text-md-right">{{ __(Password) }}</label>

<div class="col-md-6">

<input id="password" type="password" class="form-control{{ $errors-&gt;has(password) ? is-invalid : }}" name="password" required>

@if ($errors-&gt;has(password))

<span class="invalid-feedback" role="alert">

<strong>{{ $errors-&gt;first(password) }}</strong>

</span>

@endif

</div>

</div>

<div class="form-group row">

<label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __(Confirm Password) }}</label>

<div class="col-md-6">

<input id="password-confirm" type="password" class="form-control" name="password_confirmation" required>

</div>

</div>

<div class="form-group row mb-0">

<div class="col-md-6 offset-md-4">

<button type="submit" class="btn btn-primary">

{{ __(Register) }}

</button>

</div>

</div>

登录后复制

注意,我们使用了 Blade 模板引擎的 @csrf 和 @if 语句来生成必要的 CSRF 令牌并显示验证错误消息。

结论

通过 Laravel 可以快速、方便、安全地实现 Web 应用程序的登录和注册身份验证功能,从而保护您的应用程序免受未授权的访问。在本文中,我们介绍了 Laravel 的身份验证系统并实现了注册和登录。现在,您可以使用这些基础知识构建更完整的用户身份验证系统,或将其集成到您的现有应用程序中。

以上就是laravel 实现登录注册的详细内容,更多请关注php中文网其它相关文章!

最新文章