laravel 登录在 url 中显示密码和 id
Posted
技术标签:
【中文标题】laravel 登录在 url 中显示密码和 id【英文标题】:laravel login showing password and id in url 【发布时间】:2019-12-30 10:24:25 【问题描述】:我在 laravel 中创建了一个登录名,实际上是 laravel 的新手,该网站已经在 laravel 中创建,我尝试添加登录名并在其中注册,welcome.blade.php 中的登录名如下:
<?php
$username = "";
$errors = array();
$db = mysqli_connect('localhost', 'root', 'root', 'test');
$user_check_query = "SELECT * FROM registers WHERE username='$username' LIMIT 1";
$result = mysqli_query($db, $user_check_query);
$user = mysqli_fetch_assoc($result);
if ($user) // if user exists
if ($user['username'] === $username)
array_push($errors, "Username already exists");
?>
<form method="get" action="">
<div style="width: 300px;">
<input type="text" name="username" class="form-control" placeholder="Username" >
</div>
<br>
<div style="width: 300px;">
<input type="password" name="password" class="form-control" placeholder="Password" >
</div>
<br>
<button type="submit" class="btn" name="login_user">Login</button>
</form>
<?php if (isset($_GET['login_user']))
$username = mysqli_real_escape_string($db, $_GET['username']);
$password = mysqli_real_escape_string($db, $_GET['password']);
if (empty($username))
array_push($errors, "Username is required");
if (empty($password))
array_push($errors, "Password is required");
if (count($errors) == 0)
$query = "SELECT * FROM registers WHERE username='$username' AND password='$password'";
$results = mysqli_query($db, $query);
if (mysqli_num_rows($results) == 1)
$_SESSION['username'] = $username;
$_SESSION['success'] = "You are now logged in";
header('location: index.php');
else
array_push($errors, "Wrong username/password combination");
?>
每当我尝试登录时,它都不会登录,而是重新加载同一页面,并在 url 中显示输入的密码和用户名,如下所示
http://demo.website/teia/members/?username=test&password=testing&login_user=
谁能告诉我我的代码有什么问题
【问题讨论】:
这是核心 PHP 代码而不是 laravel 【参考方案1】:https://laravel.com/docs/5.8/authentication
您可以找到用于创建 laravel 登录/注册的工作流程。
Laravel 自带身份验证/登录/注销,您无需自己编写代码!
【讨论】:
我不明白,那我应该如何更改我的代码? 好吧,在你的控制台中。此命令:“php artisan make:auth”将创建一个注册页面 + 登录页面,它将处理包括数据库在内的所有内容。 这个网站有一个基本的 laravel 视频教程:laracasts.com/series/laravel-from-scratch-2018 它涵盖了所有的基础知识,我相信它也是由 laravel 团队制作的【参考方案2】:您在表单中使用了错误的方法。 GET
方法总是使用输入数据生成 URI,这在处理数据(例如用户个人信息)时确实是一个巨大的漏洞。 GET用于向指定资源请求数据,查询字符串在GET请求的URL中发送。
关于 GET 请求的一些其他说明:
GET 请求可以被缓存 GET 请求保留在浏览器历史记录中 GET 请求可以添加书签 在处理敏感数据时绝不应使用 GET 请求 GET 请求有长度限制为防止这种情况发生,请使用 POST 方法。 POST 用于向服务器发送数据。使用 POST 发送到服务器的数据存储在 HTTP 请求的请求体中,而不是存储在 URI 中,这样更安全。
关于 POST 请求的一些其他说明:
POST 请求永远不会被缓存 POST 请求不会保留在浏览器历史记录中 无法为 POST 请求添加书签 POST 请求对数据长度没有限制将您的表单更改为:
<form method="POST" action="">
参考:w3schools。
编辑:不要忘记将您的路线也更改为 POST。
【讨论】:
我之前用过post,但是显示post not supported,我应该用get,这就是我用get的原因 我也将路线更改为发帖,但仍不支持显示帖子 您能否编辑您的问题并包含您的路线。同时在控制台中运行php artisan route:list
,并粘贴登录路径的输出。【参考方案3】:
第一个问题是您使用表单方法作为“get”。它应该是“帖子”。否则,您插入的数据将显示在 URL 中。
其次,表单的动作是空的。这就是它重新加载同一页面的原因。
要解决这个问题,你应该更深入地挖掘。您应该为表单定义一个操作 URL,并在 routes/web.php
中定义它。
然后它应该由控制器处理。您应该制作一个控制器并将其命名为 LoginController.php 之类的名称。
那么处理用户认证的逻辑应该存储在那里。
此外,laravel 有一个样板工作人员,可以使身份验证更容易一些。如果你喜欢,你应该通过这个documentation。
【讨论】:
【参考方案4】:您正在使用表单方法 GET 而不是 POST,即输入值显示在 URL 中也转换下面的行
php if (isset($_GET['login_user']))
$username = mysqli_real_escape_string($db, $_GET['username']);
$password = mysqli_real_escape_string($db, $_GET['password']);
到
php if (isset($_POST['login_user']))
$username = mysqli_real_escape_string($db, $_POST['username']);
$password = mysqli_real_escape_string($db, $_POST['password']);
【讨论】:
以上是关于laravel 登录在 url 中显示密码和 id的主要内容,如果未能解决你的问题,请参考以下文章
使用带有 Laravel Vue 应用程序的 vue-router,如果我在登录后转到基本 URL,它会显示 404
在 Laravel Auth() 中通过电子邮件/电话号码登录