Commit f640390c authored by Дмитрий Никулин's avatar Дмитрий Никулин Committed by Vitaly Lipatov

Add more detailed README

parent 63246987
Using # Checkemail
=====
Add
## 1. Установка
Для checkemail необходим jQuery. Если его нет на странице, то можете добавить:
```
<script type="text/javascript" src="//eterfund.ru/js/jquery/jquery-latest.min.js"></script> <script type="text/javascript" src="//eterfund.ru/js/jquery/jquery-latest.min.js"></script>
```
Далее, добавьте сам checkemail (после jQuery):
```
<script type="text/javascript" src="//eterfund.ru/api/email/svcCheckEmail.js"></script> <script type="text/javascript" src="//eterfund.ru/api/email/svcCheckEmail.js"></script>
```
## 2. Использование
Checkemail, по сути, состоит из трёх частей:
1. Клиентский скрипт на JavaScript
2. Серверный код вычисления хэша
3. Код проверки хэша на сайте
to page with e-mail input field. ### 2.1 Настройка клиента
Mark input e-mail tag with class="svcCheckEmail" Чтобы связать checkEmail с нужным полем на странице, задайте полю
класс svcCheckEmail:
```
<input type='email' class='svcCheckEmail'>
```
You can also add emailhash input field to form: И добавьте скрытое поле в форму:
```
<input type="hidden" name="emailhash" value="valuable" /> <input type="hidden" name="emailhash" value="valuable" />
```
После этого checkEmail сам добавит нужные обработчики и всё должно заработать.
Checkemail будет обращаться к серверу и подставлять вычисленный хэш в скрытое поле.
### 2.2 Проверка на сервере
На сервере в обработчике формы вам нужно проверять значение emailhash.
Пример кода на PHP, который проверяет соответствие emailhash:
```
function get_client_ip()
{
$ipaddress = '';
if (isset($_SERVER['HTTP_CLIENT_IP']))
$ipaddress = $_SERVER['HTTP_CLIENT_IP'];
else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_X_FORWARDED']))
$ipaddress = $_SERVER['HTTP_X_FORWARDED'];
else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
$ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_FORWARDED']))
$ipaddress = $_SERVER['HTTP_FORWARDED'];
else if(isset($_SERVER['REMOTE_ADDR']))
$ipaddress = $_SERVER['REMOTE_ADDR'];
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
function get_emailhash($email)
{
$http_referer = $_SERVER['HTTP_REFERER'];
$domain = parse_url($http_referer, PHP_URL_HOST);
$ip = get_client_ip();
# Due strange providers who change IP on every request
$net = preg_replace( '_(\d+)\.(\d+)\.(\d+)\.(\d+)$_', '$1.$2.$3', $ip );
return md5($domain.$net.$email);
}
$expectedEmailhash = get_emailhash($data['email']);
if ($data['emailhash'] != $expectedEmailhash) {
// Проверка не пройдена
}
```
Обратите внимание, что если вы используете обратный прокси (например, nginx), то
необходимо настроить проброс IP-адреса клиента через заголовок X-Forwarded-For.
It will fills with special hash you can check on the server side. ### 2.3 Дополнительные возможности
- *Отключение стилей.* Checkemail применяет стили к полю ввода, но иногда это мешает.
Чтобы отключить стили checkemail, добавьте класс svcCheckEmail-nostyle на `<input>`.
- *Вызов checkemail вручную.* Иногда необходимо вызвать checkemail вручную - например,
если форма отправляется через асинхронный запрос (XHR/fetch). Для этого есть метод
`window.checkEmail(callback)`, где `callback` - функция вида `function (valid) { ... }`.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment