В MVC, куда корректное место состоит в том, чтобы поместить код авторизации?

Вы можете протестировать регулярное выражение в клиенте MySQL, не используя триггер:

mysql> select 'user@example.com' REGEXP '^[^@]+@[^@]+\.[^@]{2,} 

Это ожидаемо, но как насчет того, чтобы мы дали ему недействительный адрес электронной почты?

mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\.[^@]{2,} 

Что должно быть 0, но почему бы и нет?

Потому что \. недостаточно для выхода из точки в регулярном выражении. Один \ теряется, когда SQL анализирует строку. Нам нужно, чтобы литерал \ находился в строке регулярного выражения, чтобы избежать точки. Поэтому мы должны использовать double \\, чтобы один единственный литерал \ оставался в регулярном выражении после того, как MySQL его отсканировал один раз.

mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\\.[^@]{2,} 

П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]

Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .

as email_match; +-------------+ | email_match | +-------------+ | 0 | +-------------+

П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]

Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .

as email_match; +-------------+ | email_match | +-------------+ | 1 | +-------------+

Что должно быть 0, но почему бы и нет?

Потому что \. недостаточно для выхода из точки в регулярном выражении. Один \ теряется, когда SQL анализирует строку. Нам нужно, чтобы литерал \ находился в строке регулярного выражения, чтобы избежать точки. Поэтому мы должны использовать double \\, чтобы один единственный литерал \ оставался в регулярном выражении после того, как MySQL его отсканировал один раз.

mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\\.[^@]{2,} 

П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]

Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .

as email_match; +-------------+ | email_match | +-------------+ | 0 | +-------------+

П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]

Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .

as email_match; +-------------+ | email_match | +-------------+ | 1 | +-------------+

Это ожидаемо, но как насчет того, чтобы мы дали ему недействительный адрес электронной почты?

mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\.[^@]{2,} 

Что должно быть 0, но почему бы и нет?

Потому что \. недостаточно для выхода из точки в регулярном выражении. Один \ теряется, когда SQL анализирует строку. Нам нужно, чтобы литерал \ находился в строке регулярного выражения, чтобы избежать точки. Поэтому мы должны использовать double \\, чтобы один единственный литерал \ оставался в регулярном выражении после того, как MySQL его отсканировал один раз.

mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\\.[^@]{2,} 

П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]

Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .

as email_match; +-------------+ | email_match | +-------------+ | 0 | +-------------+

П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]

Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .

as email_match; +-------------+ | email_match | +-------------+ | 1 | +-------------+

Что должно быть 0, но почему бы и нет?

Потому что \. недостаточно для выхода из точки в регулярном выражении. Один \ теряется, когда SQL анализирует строку. Нам нужно, чтобы литерал \ находился в строке регулярного выражения, чтобы избежать точки. Поэтому мы должны использовать double \\, чтобы один единственный литерал \ оставался в регулярном выражении после того, как MySQL его отсканировал один раз.

mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\\.[^@]{2,} 

П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]

Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .

as email_match; +-------------+ | email_match | +-------------+ | 0 | +-------------+

П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]

Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .

5
задан Itay Moav -Malimovka 11 March 2009 в 15:06
поделиться

5 ответов

Я голосую за помещение его, где это имеет смысл. Большая часть моего материала авторизации обрабатывается через украшение действий контроллера (или даже некоторые контроллеры) с AuthorizeAttribute - или атрибут, полученный из него. В нескольких случаях - как мои меню - я обратился к помещению авторизации, регистрируются в самом коде представления, вместо того, чтобы вычислить его в каждом контроллере и передать флаги в ViewData. Существует несколько экземпляров, где определенные аспекты модели только доступны конкретным ролям, и в тех случаях я обратился к расширению модели с методами, которые могут взять текущего пользователя и роли и сделать проверку там.

3
ответ дан 14 December 2019 в 19:26
поделиться

Я думаю, что авторизация является сквозным беспокойством. Должен быть в одном месте - аспект, который может быть декларативно применен, где он необходим.

1
ответ дан 14 December 2019 в 19:26
поделиться

Контроллер!

Ваше Представление должно только обработать пользовательский интерфейс и отобразиться, Ваша Модель должна представить данные в Вашей системе. Ваш Контроллер должен обработать логику того, как система работает.

Авторизация пользователя включает взятие учетных данных, обеспеченных от Представления, проверки их против своего рода списка авторизации в модели и затем выполнении проверки.

Это сделано в контроллере: Получите удостоверения пользователя от Представления, если (соответствуют списку пользователей в соответствии возвратов модели) авторизовывают пользователей, еще отказывают в доступе

1
ответ дан 14 December 2019 в 19:26
поделиться

Если необходимо выбрать между M, V или c, C является корректным местом. Но, я рекомендую архитектуру, где Ваше приложение все содержится в библиотеках, и UI является просто тонкой фанерой. Вы заканчиваете тем, что раскритиковали стек от Контроллера, но код не находится в контроллере.

В MVC Модель является просто моделью или "немым объектом данных", если Вы будете. Это разработано для содержания состояния и не должно диктовать поведение. Представление состоит в том, чтобы пользователь взаимодействовал с и является также "немым"; представление обрабатывает UI. Контроллер - то, где поведение находится или является точкой входа в поведение в случае, где логика приложения находится в библиотеках. Иметь смысл?

0
ответ дан 14 December 2019 в 19:26
поделиться

Модель.

Контроллер только для переключения через различные пути. Представление только для того, чтобы... просмотреть.

Таким образом, необходимо сделать все коды авторизации в уровне Model. Идеально, все будет работать просто великолепно. В противном случае затем контроллер возьмет пользователя к надлежащему полю входа в систему.

0
ответ дан 14 December 2019 в 19:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: