{"id":1998,"date":"2020-05-20T18:31:00","date_gmt":"2020-05-20T21:31:00","guid":{"rendered":"https:\/\/danielamaksoud.com.br\/blog\/?p=1998"},"modified":"2021-11-20T20:30:56","modified_gmt":"2021-11-20T23:30:56","slug":"cakephp-como-criei-sistema-de-login","status":"publish","type":"post","link":"https:\/\/danielamaksoud.com.br\/blog\/cakephp-como-criei-sistema-de-login\/","title":{"rendered":"CakePHP: Como criei sistema de login?"},"content":{"rendered":"<ul class=\"heart-list\">\n<li>Criei um projeto novo com <em>CakePHP<\/em>.<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">composer create-project --prefer-dist cakephp\/app:~4.0 administradora-imoveis\r\n<\/pre>\n<ul class=\"heart-list\">\n<li>O <em>Composer<\/em> criou um diret\u00f3rio novo com os arquivos do projeto.<\/li>\n<\/ul>\n<figure><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/danielamaksoud.com.br\/blog\/wp-content\/uploads\/2020\/07\/administradora-imoveis-folder.png?ssl=1\" \/><figcaption>Pasta do novo projeto no <em>Finder<\/em>.<\/figcaption><\/figure>\n<ul class=\"heart-list\">\n<li>Criei um banco de dados <em>MySQL<\/em> chamado de <b>administradora-imoveis<\/b>.<\/li>\n<\/ul>\n<ul class=\"heart-list\">\n<li>Alterei o arquivo <b>\/config\/app_local.php<\/b> da seguinte forma:<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">'username' =&gt; 'root',\r\n'password' =&gt; 'root',\r\n'database' =&gt; 'administradora-imoveis',\r\n<\/pre>\n<ul class=\"heart-list\">\n<li>Conectei o banco de dados <b>administradora-imoveis<\/b> \u00e0 aplica\u00e7\u00e3o em <em>CakePHP<\/em>.<\/li>\n<\/ul>\n<figure><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/danielamaksoud.com.br\/blog\/wp-content\/uploads\/2020\/07\/success-connection-db-mysql.png?ssl=1\" \/><figcaption>Mensagem de sucesso da conex\u00e3o com o banco de dados <em>MySQL<\/em>.<\/figcaption><\/figure>\n<ul class=\"heart-list\">\n<li>Criei a tabela <b><em>users<\/em><\/b> com o seguinte c\u00f3digo <em>SQL<\/em>:<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<figure><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/danielamaksoud.com.br\/blog\/wp-content\/uploads\/2020\/04\/users-table-mysql.png?ssl=1\" \/><figcaption>Tabela <b><em>users<\/em><\/b> no <em>phpMyAdmin<\/em>.<\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">CREATE TABLE `users` (\r\n  `id` int(11) NOT NULL,\r\n  `name` varchar(220) NOT NULL,\r\n  `email` varchar(220) NOT NULL,\r\n  `username` varchar(220) NOT NULL,\r\n  `password` varchar(220) NOT NULL,\r\n  `created` datetime NOT NULL,\r\n  `modified` datetime DEFAULT NULL\r\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\r\n\r\nALTER TABLE `users`\r\n  ADD PRIMARY KEY (`id`);\r\n\r\nALTER TABLE `users`\r\n  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;\r\n<\/pre>\n<ul class=\"heart-list\">\n<li>No diret\u00f3rio da aplica\u00e7\u00e3o em <em>CakePHP<\/em>, gerei o <em>CRUD<\/em> da tabela <b><em>users<\/em><\/b> com o seguinte c\u00f3digo:<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">bin\/cake bake all users\r\n<\/pre>\n<ul class=\"heart-list\">\n<li>O <em>plugin<\/em> <b><em>bake<\/em><\/b> criou os seguintes arquivos:\n<ul>\n<li><b>\/src\/Controller\/UsersController.php<\/b><\/li>\n<li><b>\/src\/Model\/Entity\/User.php<\/b><\/li>\n<li><b>\/src\/Model\/Table\/UsersTable.php<\/b><\/li>\n<li><b>\/src\/templates\/Users\/add.php<\/b><\/li>\n<li><b>\/src\/templates\/Users\/edit.php<\/b><\/li>\n<li><b>\/src\/templates\/Users\/index.php<\/b><\/li>\n<li><b>\/src\/templates\/Users\/view.php<\/b><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul class=\"heart-list\">\n<li>Criei uma rota para o diret\u00f3rio <b>admin<\/b>.<\/li>\n<\/ul>\n<ul class=\"heart-list\">\n<li>N\u00e3o consegui criar uma rota direta para <b>admin\/logout<\/b>. Logo, \u00e9 preciso acessar <b>admin\/users\/logout<\/b>.<\/li>\n<\/ul>\n<ul class=\"heart-list\">\n<li>Tive problemas para usar a classe <em>Event<\/em> na <em>function<\/em> <em>beforeRender<\/em>.<\/li>\n<\/ul>\n<ul class=\"heart-list\">\n<li>Foi necess\u00e1rio adicionar o seguinte c\u00f3digo a <em>AppController.php<\/em>:<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">use Cake\\Event\\EventInterface;\r\n<\/pre>\n<ul class=\"heart-list\">\n<li>Foi necess\u00e1rio utilizar <em>EventInterface<\/em> no <em>CakePHP 4.0 Strawberry<\/em>, ao inv\u00e9s de <em>Event<\/em>.<\/li>\n<\/ul>\n<blockquote><p><b>Fonte<\/b>: <a href=\"https:\/\/stackoverflow.com\/questions\/32690756\/declaration-of-userscontrollerbeforefilter-should-be-compatible-with-appcont\" target=\"_blank\" rel=\"noopener noreferrer\">Declaration of UsersController::beforeFilter() should be compatible with AppController::beforeFilter(Cake\\Event\\Event $event)<\/a><\/p><\/blockquote>\n<ul class=\"heart-list\">\n<li>Foi necess\u00e1rio consultar a documenta\u00e7\u00e3o do <em>CakePHP<\/em> para poder fazer os formul\u00e1rios.<\/li>\n<\/ul>\n<blockquote><p><b>Fonte<\/b>: <a href=\"https:\/\/book.cakephp.org\/1.3\/pt\/The-Manual\/Core-Helpers\/Form.html\" target=\"_blank\" rel=\"noopener noreferrer\">Form<\/a><\/p><\/blockquote>\n<ul class=\"heart-list\">\n<li>Adicionei a imagem da logomarca em <b>templates\/login.php<\/b> com o seguinte c\u00f3digo:<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\"><!-- <?= $this->Html->image('logo.png', array('class' => 'mb-4', 'alt' => 'Administradora de Im\u00f3veis', 'width' => '72', 'height' => '72')) ?> -->\r\n<\/pre>\n<ul class=\"heart-list\">\n<li>N\u00e3o consegui solucionar o problema do posicionamento do seletor <em>CSS<\/em> <em>form-signin<\/em>, que tem o seu conte\u00fado do topo cortado na p\u00e1gina <b>admin\/users\/login<\/b> quando se reduz o tamanho da tela.<\/li>\n<\/ul>\n<figure><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/danielamaksoud.com.br\/blog\/wp-content\/uploads\/2020\/05\/login-div-problem.png?ssl=1\" \/><figcaption>P\u00e1gina de <em>login<\/em>.<\/figcaption><\/figure>\n<h2>Projeto de Sistema de Login<\/h2>\n<p><center><br \/>\n<div class=\"sdm_download_button_box_default\"><div class=\"sdm_download_link\"><span class=\"sdm_enter_password_label_text\">Enter Password to Download:<\/span><form action=\"https:\/\/danielamaksoud.com.br\/blog\/?sdm_process_download=1&download_id=2144\" method=\"post\" id=\"sdm-pass-69e8c5f7248ad\" class=\"sdm-download-form\"><input type=\"password\" name=\"pass_text\" class=\"sdm_pass_text\" value=\"\" \/> <span class=\"sdm-download-button\"><a href=\"#\" name=\"sdm_dl_pass_submit\" class=\"pass_sumbit sdm_pass_protected_download sdm_download_with_condition sdm_download green\">Download<\/a><\/span><input type=\"hidden\" name=\"download_id\" value=\"2144\" \/><\/form><\/div><\/div><br \/>\n<div class=\"sdm_download_count\"><span class=\"sdm_count_number\">0<\/span><span class=\"sdm_count_string\"> Downloads<\/span><\/div><br \/>\n<\/center><\/p>\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Criei um projeto novo com CakePHP. composer create-project &#8211;prefer-dist cakephp\/app:~4.0 administradora-imoveis O Composer criou um diret\u00f3rio novo com os arquivos do projeto. Pasta do novo projeto no Finder. Criei um&#8230;<\/p>\n<div class=\"post-bottom\"><a class=\"button\" href=\"https:\/\/danielamaksoud.com.br\/blog\/cakephp-como-criei-sistema-de-login\/\">Leia Mais<\/a><\/div>\n<div class=\"cf\"><\/div>\n","protected":false},"author":1,"featured_media":2134,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"CakePHP: Como criei login e logout?","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[55],"tags":[62,56,57],"class_list":["post-1998","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimento-web","tag-cakephp","tag-desenvolvimento-web","tag-php"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/danielamaksoud.com.br\/blog\/wp-content\/uploads\/2020\/05\/naked-cake.png?fit=3375%2C2250&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/paVjRH-we","jetpack_likes_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/danielamaksoud.com.br\/blog\/wp-json\/wp\/v2\/posts\/1998","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/danielamaksoud.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/danielamaksoud.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/danielamaksoud.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/danielamaksoud.com.br\/blog\/wp-json\/wp\/v2\/comments?post=1998"}],"version-history":[{"count":71,"href":"https:\/\/danielamaksoud.com.br\/blog\/wp-json\/wp\/v2\/posts\/1998\/revisions"}],"predecessor-version":[{"id":2145,"href":"https:\/\/danielamaksoud.com.br\/blog\/wp-json\/wp\/v2\/posts\/1998\/revisions\/2145"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/danielamaksoud.com.br\/blog\/wp-json\/wp\/v2\/media\/2134"}],"wp:attachment":[{"href":"https:\/\/danielamaksoud.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1998"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/danielamaksoud.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1998"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/danielamaksoud.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1998"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}