Php Laravel-在创建帐户时检查
在我正在创建的网站上,当访问者加载页面时,帐户会自动生成。创建帐户时,将要求新用户通过创建模式窗口选择用户名,当用户提交新用户名时,数据将发送回服务器,模式窗口将关闭 所以现在唯一的问题是我不确定如何调用这个模式窗口,只有在生成新帐户时。现在,每次重新加载页面时,它都会显示出来,但应该是在生成帐户之后 因此,在创建帐户时应调用此函数,但仅当发生此情况时:Php Laravel-在创建帐户时检查,php,jquery,laravel,Php,Jquery,Laravel,在我正在创建的网站上,当访问者加载页面时,帐户会自动生成。创建帐户时,将要求新用户通过创建模式窗口选择用户名,当用户提交新用户名时,数据将发送回服务器,模式窗口将关闭 所以现在唯一的问题是我不确定如何调用这个模式窗口,只有在生成新帐户时。现在,每次重新加载页面时,它都会显示出来,但应该是在生成帐户之后 因此,在创建帐户时应调用此函数,但仅当发生此情况时: $('#i-modal').foundation('reveal', 'open'); 创建帐户时,会发生这种情况。请求被发送到/creat
$('#i-modal').foundation('reveal', 'open');
创建帐户时,会发生这种情况。请求被发送到/createUser
用户控制器:
public function createUser()
{
$newUser = new User;
$newUser->username = 'user-'.Helpers::randomLowerCase(4);
$newUser->save();
// Check if user isn't logged in yet
if (!Auth::check()) {
Auth::login($newUser);
} else {
// ...
}
// Return the user home
return Redirect::action('HomeController@showHome');
}
那么我应该如何做到这一点,并且只调用
$('I-modal').foundation('discover','open')
在创建帐户后什么时候?一种方法是将用户输入的用户名存储在http会话中,并且可能还会自动将用户登录到系统中。然后,如果页面重新加载,UserController
检查会话中是否存储了用户名或用户是否登录。根据结果是否显示模态
因此,当第一次加载页面时,您可以执行以下步骤(然后是未测试的代码,作为放置代码每个部分的示例)
1.检查会话(php http会话,例如session_start();if(isset($_session[$username]){..
)以查看用户名是否存在或Auth::Check()
php
Route::get('checkUser', 'UserController@checkUser');
Route::get('createUser/{username}', 'UserController@createUser');
class UserController extends BaseController {
public function checkUser(){
session_start();
if(isset($_SESSION["username"])){/*or use something like Auth::check()*/
return Response::json(array('exists' => 'true'));
/*or redirect e.g. return Redirect::action('HomeController@showHome');*/
/*or render a view e.g. return View::make('user.page', array('username' => $username));*/
}else{
return Response::json(array('exists' => 'false'));
}
}
....
....
Route::get('createUser/{username}', 'UserController@createUser');
class UserController extends BaseController {
....
/*your code slightly modified*/
public function createUser($username)
{
// Check if user isn't logged in yet
if (!Auth::check()/*&& if persistence is used, which is best to actually use it to persist usernames, check if the username is available*/) {
$newUser = new User;
//$newUser->username = 'user-'.Helpers::randomLowerCase(4);
$newUser->username=$username;
$newUser->save();
Auth::login($newUser);
} else {
return Response::json(array('created' => 'false'));
/* or return Redirect::action('HomeController@loginFailed');*/
}
// Return the user home
return Redirect::action('HomeController@showHome');
}
....
<强> 1.1 < /强>如果存在,则不执行显示基础模态和欢迎用户的JS代码。
1.2如果不存在,则执行js代码并显示要求用户登录的模式窗口 js(或通过视图从php代码中输入,例如从控制器返回视图::make('user.page',array('username'=>$username));) 1.2.1如果用户输入现有用户名或生成新用户名,请登录该用户并将用户名存储在会话中 phpRoute::get('checkUser', 'UserController@checkUser');
Route::get('createUser/{username}', 'UserController@createUser');
class UserController extends BaseController {
public function checkUser(){
session_start();
if(isset($_SESSION["username"])){/*or use something like Auth::check()*/
return Response::json(array('exists' => 'true'));
/*or redirect e.g. return Redirect::action('HomeController@showHome');*/
/*or render a view e.g. return View::make('user.page', array('username' => $username));*/
}else{
return Response::json(array('exists' => 'false'));
}
}
....
....
Route::get('createUser/{username}', 'UserController@createUser');
class UserController extends BaseController {
....
/*your code slightly modified*/
public function createUser($username)
{
// Check if user isn't logged in yet
if (!Auth::check()/*&& if persistence is used, which is best to actually use it to persist usernames, check if the username is available*/) {
$newUser = new User;
//$newUser->username = 'user-'.Helpers::randomLowerCase(4);
$newUser->username=$username;
$newUser->save();
Auth::login($newUser);
} else {
return Response::json(array('created' => 'false'));
/* or return Redirect::action('HomeController@loginFailed');*/
}
// Return the user home
return Redirect::action('HomeController@showHome');
}
....
js
$.ajax({
url: "createUser",
data:{usernae:the_username_from_modal}
success: function(data) {
if(!data.created) {
/*if the redirection is not handled by the controller, handle the failed login/registration of existing username*/
}
}
});
此外,在代码中,您可能还应该将用户名存储到持久层,以便检查现有用户名,允许用户使用其现有用户名,并恢复/检索您可能在应用程序中保存的任何类型的状态或数据。我将使用AJAX检查帐户。加载完文档后,请关闭一个请求,该请求将检查以确保帐户已使用用户名完全设置。如果没有,则您可以弹出模式,我假设您已经设置了 对于本例,我正在创建一个AjaxController,您可以在其中放置所有ajax调用逻辑,但这些函数可以放在任何地方。请确保相应地更改路由。请注意,此代码大部分未经测试
// Route
Route::post('ajax/checkUserAccount', array('uses' => 'AjaxController@checkUserAccountExists', as 'ajax.checkUserAccount');
// Controller
AjaxController extends BaseController {
public function checkUserAccountExists {
// Do user account check logic here. This is just an example as I'm not sure how you plan on handling this or what variables are set when someone creates an account
$userCount = DB::table('users')->where('username', Input::get('username'))->count();
if($userCount > 0) {
return Response::json(array('member' => 'true'));
} else {
return Response::json(array('member' => 'false'));
}
}
}
// jQuery AJAX
$(document).ready(function()
{
$.ajax({
method: "POST"
, url: "{{ URL::route('ajax.checkUserAccount') }}"
success: function(data) {
if(data.member === false) {
$('#i-modal').foundation('reveal', 'open');
}
}
});
});
我认为更好的解决方案是在HTML文档的标题中包含javascript变量
User
为此,您可以创建一个全局变量,通过使用
View::share('user', $current_user);
然后在
的视图文件中,可以添加以下内容:
<script type="text/javascript">var User = {{ $user->toJson() }}</script>
这毫无意义。为什么在加载页面时会自动创建帐户?你不知道谁加载了页面,也不知道为什么,也不知道他们是否有资格创建帐户。除非用户单击“创建帐户”,否则不应打开“创建帐户”模式链接或执行等效的操作调用。此外,在modal提交的表单数据在后端成功验证之前,不应实际创建帐户 此模式中显示的表单应在前端使用JavaScript验证。这将节省用户等待数据发布后发现他们没有正确完成表单的麻烦。您可以通过将Ajax合并到前端验证中来进一步增强UX。例如,美国的onblur事件er名称输入可以触发查询数据库并检查用户名是否可用的方法。对于电子邮件输入,您可以使用类似的Ajax方法来检查电子邮件地址是否已注册。您可以使用stock jQuery验证插件完成所有这一切
请注意,前端验证只是为了方便用户。您仍然需要在服务器端验证数据,因为恶意用户很容易绕过客户端JS。假设有两个人在使用计算机。您将如何区分他们?您应该考虑制作ajax调用来创建用户。你确定这是你想要使用的模式吗?我发现这里有很多滥用的可能性。即,以匿名方式打开(或同等方式),加载页面,创建用户名,关闭incognito,然后重复。这在安全性方面不是很好。你真的想在服务器端保留这些内容。@Steve你可以在用户模型中保护某些用户数据,或者,只输出一个布尔值。