I'm using email_address as username for a simple login.
public $components = array(
'DebugKit.Toolbar',
'Session',
'Auth' => array(
'loginRedirect' => array('controller' => 'pages', 'action' => 'index'),
'logoutRedirect' => array('controller' => 'pages', 'action' => 'display', 'home'),
'loginAction' => array(
'controller' => 'users',
'action' => 'signin',
),
'authenticate' => array(
'Form' => array(
'fields' => array('username' => 'email_address')
)
)
),
);
I have explicitly told cake to use email_address as username
public function signin(){
if(! $this->Auth->user()){
if ($this->request->is('post')) {
if ($this->Auth->login()) {
return $this->redirect($this->Auth->redirectUrl());
} else {
$this->Session->setFlash(__('Username or password is incorrect'));
}
}
}else{
$this->redirect($this->Auth->redirectUrl());
}
}
I have verified that my post data is being sent through from the form
<form action="" method="post" class="form-inputs">
<fieldset>
<legend>Existing Customers</legend>
<p>Sign in to continue</p>
<ul class="form short">
<li>
<label for="username">Email</label>
<input type="email" name="username" id="username">
</li>
<li>
<label for="password">Password</label>
<input type="password" name="password" id="password">
</li>
<li class="no-label checkbox">
<input type="checkbox" name="remember_me" id="remember_me">
<label for="remember_me">Remember me</label>
</li>
<li class="no-label">
<input type="submit" value="Sign In">
Forgotten your password?
</li>
</ul>
</fieldset>
</form>
I can't successfully log in. The user does exist, and the passwords are hashed when created, like so:
public function beforeSave($options = array()) {
if (isset($this->data['User']['password'])) {
$this->data['User']['password'] = AuthComponent::password($this->data['User']['password']);
}
return true;
}
Can't see where i am going wrong, any ideas?
Related
I have a form that is type => file, with an file upload control.
When I submit this form without a file, it submits as expected.
However, When I submit the form with a file attached, I get a CSRF Token Mismatch.
Any ideas why this might be happening?
EDIT: I noticed that the csrf token is the same when i refresh the page, maybe this is part of the problem?
EDIT-2: When I disable the CSRF protection, the $this->request->getData() array is empty
EDIT-3: I have hooked XDebug up and these are the results...
Apparently $post and $header are null/empty on line 194, resulting in token mismatch
Here is my Form
<div class="col-lg-offset-1 col-lg-10">
<?php if(isset($ledger->id)) { ?>
<?= $this->Form->create($ledger, ['url' => '/shortcut/ledger_save/' . $ledger->id, 'type' => 'file', 'class' => 'form-horizontal']); ?>
<?php } else { ?>
<?= $this->Form->create($ledger, ['url' => '/shortcut/ledger_new', 'type' => 'file', 'class' => 'form-horizontal']); ?>
<?php } ?>
<?php $this->Form->setTemplates(['inputContainer' => '{{content}}', 'submitContainer' => '{{content}}']); ?>
<!-- Default box -->
<div class="box">
<div class="box-header with-border">
<?php if(isset($ledger->id)) { ?>
<h3 class="box-title">Edit <?= $ledger->ledger_title ?> Form</h3>
<?php } else { ?>
<h3 class="box-title">Create Ledger Form</h3>
<?php } ?>
</div>
<div class="box-body">
<div class="form-group">
<center>
<?php if($ledger->disabled == 'n') { ?>
<?= $this->Form->control('disabled', ['type' => 'checkbox', 'label' => false, 'class' => 'minimal']) ?> Check to disable (hide) ledger.
<?php } else { ?>
<?= $this->Form->control('disabled', ['type' => 'checkbox', 'label' => false, 'class' => 'minimal', 'checked']) ?> Uncheck to enable (show) ledger.
<?php } ?>
</center>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Ledger Title</label>
<div class="col-sm-10">
<?= $this->Form->control('ledger_title', ['label' => false, 'class' => 'form-control', 'placeholder' => 'Ledger Title', 'autofocus']) ?>
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">Total Plates</label>
<div class="col-sm-10">
<?= $this->Form->control('total_plates', ['label' => false, 'class' => 'form-control', 'placeholder' => 'Total Plates (Total Images)']) ?>
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">Total Pages</label>
<div class="col-sm-10">
<?= $this->Form->control('total_pages', ['label' => false, 'class' => 'form-control', 'placeholder' => 'Total Pages (Total Physical Pages)']) ?>
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">Check Tribes</label>
</div>
<div class="form-group">
<?php $x = 0; ?>
<?php foreach($tribes as $tribe) { ?>
<?php if($x == 0) { echo '<div class="form-group"><div class="col-sm-3"> </div>'; } ?>
<div class="col-sm-4">
<?php if(in_array($tribe->id, $ledger_tribes)) { ?>
<?= $this->Form->control('tribe_id[]', ['type' => 'checkbox', 'label' => false, 'class' => 'minimal', 'value' => $tribe->id, 'checked']) ?> <?= $tribe->name ?>
<?php } else { ?>
<?= $this->Form->control('tribe_id[]', ['type' => 'checkbox', 'label' => false, 'class' => 'minimal', 'value' => $tribe->id]) ?> <?= $tribe->name ?>
<?php } ?>
</div>
<?php $x = $x + 1; ?>
<?php if($x == 2) { echo '</div>'; $x = 0; } ?>
<?php } ?>
<?php if($x == 1) { echo '</div>'; $x = 0; } ?>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">Custodian</label>
<div class="col-sm-10">
<?= $this->Form->control('custodian', ['type' => 'textarea', 'label' => false, 'class' => 'form-control', 'style' => 'width: 100%', 'placeholder' => 'Custodian']) ?>
<?php if(!isset($ledger->overwrite_custodian) || $ledger->overwrite_custodian == 'n') { ?>
<?= $this->Form->control('overwrite_custodian_checkbox', ['type' => 'checkbox', 'label' => false, 'class' => 'minimal', 'value' => 'y']); ?> Overwrite Plate Custodian
<?php } else { ?>
<?= $this->Form->control('overwrite_custodian_checkbox', ['type' => 'checkbox', 'label' => false, 'class' => 'minimal', 'value' => 'y', 'checked']); ?> Overwrite Plate Custodian
<?php } ?>
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">Image Source</label>
<div class="col-sm-10">
<?= $this->Form->control('image_source', ['label' => false, 'type' => 'text', 'class' => 'form-control', 'placeholder' => 'Image Source']) ?>
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">Provenance</label>
<div class="col-sm-10">
<?= $this->Form->control('provenance', ['type' => 'textarea', 'label' => false, 'class' => 'form-control', 'style' => 'width: 100%', 'placeholder' => 'Provenance']) ?>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Global Keywords</label>
<div class="col-sm-10">
<?php $keywordOptions = []; ?>
<?php $keywordValues = []; ?>
<?php $foundKeywords = []; ?>
<?php foreach($keywords as $keyword) { ?>
<?php if(trim($keyword->keyword) == '') { continue; } ?>
<?php $keywordOptions[$keyword->keyword] = $keyword->keyword; ?>
<?php if(in_array($keyword->keyword, $ledger_keywords)) { $keywordValues[$keyword->id] = $keyword->keyword; $foundKeywords[] = $keyword->keyword; } ?>
<?php } ?>
<?= $this->Form->select('keyword', $keywordOptions, ['class' => 'form-control select2', 'value' => $keywordValues, 'multiple' => true]); ?>
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">Additional Keywords</label>
<div class="col-sm-10">
<?php $additionalKeywords = ''; ?>
<?php foreach($ledger_keywords as $keyword) { ?>
<?php if(in_array($keyword, $foundKeywords) == false) { ?>
<?php $additionalKeywords = $additionalKeywords . $keyword . ', '; ?>
<?php } ?>
<?php } ?>
<?php $additionalKeywords = substr($additionalKeywords, 0, strlen($additionalKeywords) - 2); ?>
<?= $this->Form->control('additional_keywords', ['type' => 'textarea', 'value' => $additionalKeywords, 'label' => false, 'class' => 'form-control', 'style' => 'width: 100%', 'placeholder' => 'Additional Keywords']) ?>
<p class="help-block">Seperated by commas.</p>
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">Arist</label>
<div class="col-sm-10">
<?= $this->Form->control('artist', ['label' => false, 'class' => 'form-control', 'placeholder' => 'Artist']) ?>
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">Media</label>
<div class="col-sm-10">
<?= $this->Form->control('media', ['label' => false, 'class' => 'form-control', 'placeholder' => 'Media']) ?>
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">Dimensions</label>
<div class="col-sm-10">
<?= $this->Form->control('dimensions', ['label' => false, 'class' => 'form-control', 'placeholder' => 'Dimensions']) ?>
</div>
</div>
<?php if(!isset($ledger->id)) { ?>
<div class="form-group">
<label for="exampleInputFile" class="col-sm-2 control-label">Batch Upload</label>
<div class="col-sm-10">
<?= $this->Form->file('uploadfile', array('label' => false, 'type' => 'file')) ?>
<p class="help-block">Select the ledger images archive here.</p>
</div>
</div>
<?php } ?>
</div>
<!-- /.box-body -->
<div class="box-footer">
<?= $this->Form->button('Submit', ['type' => 'submit', 'class' => 'btn btn-success btn-pill pull-right']) ?>
</div>
<!-- /.box-footer-->
</div>
<?= $this->Form->end() ?>
<!-- /.box -->
</div>
Here is the Form html output
<!-- Main content -->
<section class="content">
<div class="col-lg-offset-1 col-lg-10">
<form enctype="multipart/form-data" method="post" accept-charset="utf-8" class="form-horizontal" action="/shortcut/ledger_new"><div style="display:none;"><input type="hidden" name="_method" value="POST"/><input type="hidden" name="_csrfToken" autocomplete="off" value="06d11527d1e431fd1d1b73a6b96e9af1eec6a1fd6c2ede60cfdb06afdcff5b3c02216614f61ba68bf1bf0beeba8b5f7500319ec94ec278141ee4f480b4a4505f"/></div>
..... SNIPPED TO MAKE MAX CHARS ALLOWED ....
<div class="box-footer">
<button type="submit" class="btn btn-success btn-pill pull-right">Submit</button> </div>
<!-- /.box-footer-->
</div>
</form> <!-- /.box -->
</div>
</section>
Here is the inspection headers
Here is the inspection headers without the file upload populated, as you can see, in the above picture there is no Form Data, and in the below picture there is.
The post_max_size inside the /etc/php.ini file was set to 8M, it has to be set larger than the uploaded file size.
So, what I did was, I set
post_max_size = 80M
and I set
upload_max_filesize = 60M
and the form submitted as expected after that
i i have an Registration form and this form i have in login.ctp this is how it looks:
<--Here is the login code-->
---
<--Here is the end of login code-->
<--Here start the Singup code-->
<div class="form-bottom">
<?= $this->Form->create('Registration', array('url' => array('controller' => 'users', 'action' => 'singup')));?>
<form role="form" action="" method="post" class="registration-form">
<div class="form-group">
<?= $this->Form->control('email', array('placeholder'=>'Email','class'=>'form-email form-control'));?>
</div>
<div class="form-group">
<?= $this->Form->input('password', array('type'=>'password','placeholder'=>'Password','class'=>'form-password form-control'));?>
</div>
<div class="form-group">
<?= $this->Form->input('cPassword', array('label' => 'Confirm Password','placeholder'=>'Confirm Password', 'title' => 'Confirm password','class'=>'form-password form-control', 'type'=>'password'));?>
</div>
<?= $this->Form->submit('Singup', array('class'=>'btn btn-outline-primary my-2 my-sm-0','style'=>'float:right'));?>
<?= $this->Form->end();?>
The Problem is when i fill email, password and confirm password input right and when i press singup button its work but when i give some wrong(that don't pass the validation) email or password and something like this, it redirect me to Users/singup. What i want is to disable redirecting , how can i do this?
How do I produce the following HTMl using the Cakephp form helper:
<div class="form-group">
<label for="input-Default" class="col-sm-2 control-label">Default</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="input-Default">
</div>
</div>
THanks
Everything you need is in the Html helper.
echo $this->Html->div('form-group',
$this->Html->tag('label', 'Default',
array(
'for' => 'input-Default',
'class' => 'col-sm-2 control-label',
)
) .
$this->Html->div('col-sm-10',
$this->Form->input('',
array(
'type' => 'text',
'class' => 'form-control',
'id' => 'input-Default',
'div' => false,
'label' => false
)
)
)
);
http://book.cakephp.org/2.0/en/core-libraries/helpers/html.html
Is there a way to test if a particular text field has an error so that i can add a Class to highlight the who text box
<div class="form-group">
<?php echo $this->Form->label('name', 'Name:', array('class' => 'col-sm-2 control-label')); ?>
<div class="col-sm-10">
<?php echo $this->Form->text('name', array('required' => false, 'class' => 'form-control input-lg')); ?>
<?php echo $this->Form->error('name', null, array('class' => 'label label-block label-danger text-left', 'wrap' => 'label')); ?>
</div>
</div>
i want to add has-error to <div class="form-group"> div if name has any errors
You can use
$this->Form->isFieldError('fieldname');
<div class="form-group <?= ($this->Form->isFieldError('name'))? 'has-error': '' ; ?>">
<?php echo $this->Form->label('name', 'Name:', array('class' => 'col-sm-2 control-label')); ?>
<div class="col-sm-10">
<?php echo $this->Form->text('name', array('required' => false, 'class' => 'form-control input-lg')); ?>
<?php echo $this->Form->error('name', null, array('class' => 'label label-block label-danger text-left', 'wrap' => 'label')); ?>
</div>
</div>
I am using the TwitterBootstrap Plugin for CakePHP2.x. And I can't get the combination of a horizontal form with a nested inline form to work.
part of my code:
<?php
echo $this->Form->create('Event', array('class' => 'form-horizontal'));
echo $this->Form->input('Event.short_name',array(
'label' => 'Short name',
'type' => 'text',
'class' => 'span5'
));
?>
<div class="control-group">
<div class="control-label">Date & Time</div>
<div class="controls form-inline">
<div class=" input-append">
<?php
echo $this->Form->input('Event.start_date', array(
'label' => false,
'type' => 'text',
'class' => 'span2 start_date',
'after' => '<span class="add-on datetime"><span class="icon-calendar"></span></span>'
));
echo $this->Form->input('Event.end_date', array(
'label' => false,
'type' => 'text',
'class' => 'span2 end_date',
'after' => '<span class="add-on"><span class="icon-calendar"></span></span>'
));
?>
</div>
</div>
</div>
In the above example this happens:
and the generated html
<div class="control-group">
<div class="control-label">Date & Time</div>
<div class="controls form-inline">
<div class=" input-append">
<div class="control-group">
<div class="controls">
<input name="data[Event][start_date]" class="span2 start_date" type="text" value="2013-06-15" id="EventStartDate" required="required"><span class="add-on"><span class="icon-calendar"></span></span>
</div>
</div>
<div class="control-group">
<div class="controls">
<input name="data[Event][end_date]" class="span2 end_date" type="text" value="2013-06-22" id="EventEndDate" required="required"><span class="add-on"><span class="icon-calendar"></span></span>
</div>
</div>
</div>
</div>
</div>
When I add 'div' -> false to the two date form field they move inline but the padding etc is gone.
and the generated html
<div class="control-group">
<div class="control-label">Date & Time</div>
<div class="controls form-inline">
<div class=" input-append">
<input name="data[Event][start_date]" class="span2 start_date" type="text" value="2013-06-15" id="EventStartDate" required="required"><span class="add-on"><span class="icon-calendar"></span></span>
<input name="data[Event][end_date]" class="span2 end_date" type="text" value="2013-06-22" id="EventEndDate" required="required"><span class="add-on"><span class="icon-calendar"></span></span>
</div>
</div>
</div>
I think this is due to the fact that all form fields are placed in controls divs... Does anyone know how to solve this?
I also posted this as an issue on the GitHub page, since I think it has to do with the plugin, but I hope someone knows a temp workarround.
Maybe this could work. I used it before and it looks like this:
<?php echo $this->Form->create('Event', array(
'class' => 'form-horizontal',
'inputDefaults' => array(
'format' => array('before', 'label', 'between', 'input', 'error', 'after'),
'div' => array('class' => 'control-group'),
'label' => array('class' => 'control-label'),
'between' => '<div class="controls">',
'after' => '</div>',
'error' => array('attributes' => array(
'wrap' => 'span', 'class' => 'help-inline'
)),
)));?>
<fieldset>
<?php echo $this->Form->input('Event.start_date', array(
'label' => array('class' => 'control-label',
'text' => 'start date'),
));?>
</fieldset>
<?php echo $this->Form->end();?>
The issue might be conflict between TB and Cake about float and clear, because cake.generic.css sets for form div clear:both which moves elements below instead of next to.
Try this:
div.form-inline div{
clear: none;
}