Phoenix 是一个基于 Elixir 的 Web 开发框架,它使用服务器端模型视图控制器 (MVC) 设计模式。它的实现(组件和构造)可与其他知名框架相媲美,包括 Ruby on Rails、Node 的 Express.js 和 Python 的 Django。Phoenix 利用众所周知的 Web 开发结构,修复 Discord Krisp 无法正常工作的 9 种解决方案如果您已经在该领域工作过,则可以轻松学习。

在本教程中,我们将学习如何使用生成器向如何修复请等待当前程序卸载错误 Phoenix 应用程序添加身份验证。该 生成器因其灵活性、网站和网络应用程序的区别在哪里?安全性及其对 Elixir 最佳实践的实施而被广泛使用。修复 Google Chrome 状态无效图像错误包含在 Phoenix 框架中,是向 Phoenix 应用程序添加身份验证的推荐方法。phx.gen.authphx.gen.authPhx.gen.auth

我们将涵盖:

  • 开始使用 Phoenix

  • 创建 Phoenix 应用程序

  • 更新数据库凭据

  • 使用 为 HTML 资源生成 MVCphx.gen.html

  • 身份验证phx.gen.auth

  • 探索由创建的文件phx.gen.auth

  • 向我们的路由添加身份验证/tasks

先决条件

  • 长生不老药

  • 数据库

要在您的系统上安装 Elixir,修复 Kodi 无法连接到网络服务器请访问Elixir 文档并按照适用于您的操作系统的安装说明进行操作。

开始使用 Phoenix

运行以下命令在您的系统上安装 Phoenix:

mix archive.install hex phx_new

上面的命令指示Mix安装 Phoenix 框架。如何在 Windows 10 中查看主板型号与其他主流编程语言类似,Elixir 提供了 Mix 构建工具来帮助编译、创建和测试应用程序,以及安装、更新和卸载依赖项。如果没有像 Mix 这样的工具,修复 Windows 10 映射驱动器未显示在程序中使用 Elixir 是不可想象的。

创建 Phoenix 应用程序

通过在命令中提供标志,修复 Skype 在来电时不响铃可以在没有数据库的情况下创建 Phoenix 应用程序,但是因为我们需要数据持久性,所以我们将使用数据库。本课选择的数据库是 PostgreSQL,这是 Phoenix 应用程序的标准选择。修复 Yahoo Mail 停止显示图片--no-ectophx.new

要安装 PostgreSQL,请参阅文档,或者您可以访问本教程以使用 Docker 安装和运行:

mix phx.new todo_app

这里,todo是我们希望创建的应用程序的名称。修复暴雪 Battle.NET 错误代码 2当出现提示时,选择是。获取依赖项后,修复 Windows 10 或 11 上的系统服务异常我们还有几个步骤来启动和运行我们的应用程序。Fetch and install dependencies? [Yn]

首先,我们要进入我们新建的app目录:

cd todo_app

更新数据库凭据

接下来,我们必须配置我们的数据库,修复 NVIDIA GeForce 在 Windows 10 上不兼容找到并 更新以下行以反映我们的 Postgres 数据库和:config/dev.exs usernamepassword

username: "postgres",

password: "postgres",

然后,运行以下命令来创建数据库:

mix ecto.create

最后,修复您无法发送消息的 Microsoft Teams 错误我们可以使用以下命令运行我们的服务器:

mix phx.server

访问以查看您的 Phoenix 应用程序:http://localhost:4000

使用 为 HTML 资源生成 MVCphx.gen.html

Phoenix 为我们提供了一种为 HTML 资源生成控制器、修复 Halo Infinite No Ping 到数据中心检测到的错误视图和上下文的方法:

mix phx.gen.html Todo Task tasks name:string completed:boolean

我们为生成器提供了几个参数,第一个是上下文模块,然后是模式模块的名称,最后是模式的复数名称(用作模式表名称的名称)。修复 Roblox 错误代码 524和是将在表中创建的两个字段。phx.gen.htmlname:stringcompleted:booleantasks

查看终端,我们可以看到Phoenix提供的指令:

首先,我们必须将 复制到我们的文件中:resources "/tasks", TaskControllerlib/todo_app_web/router.ex

defmodule TodoAppWeb.Router do

use TodoAppWeb, :router

...

scope "/", TodoAppWeb do

pipe_through(:browser)

get("/", PageController, :index)

resources "/tasks", TaskController #updated

end

...

代表resources不同的 HTTP 方法——Phoenix 提供了resources.

然后,我们必须更新我们的数据库以更新由以下人员所做的更改:phx.gen.html

mix ecto.migrate

最后,要访问生成的任务路由,修复 Netflix 无法在 Virgin Media 上运行的 17 种方法请访问:http://localhost:4000/tasks

在上面的截图中,我添加了几个未完成的任务。随意做同样的事情并尝试一下应用程序。Phoenix 为这些生成的资源提供开箱即用的 CRUD 功能,因此无需任何额外的代码,我们就可以从数据库中创建、更新和删除任务。

身份验证phx.gen.auth

Phoenix 提供了一种非常简单的方法来使用生成器向我们的应用程序添加身份验证。让我们看看如何做到这一点。phx.gen.auth

在您的终端中,运行:

mix phx.gen.auth Accounts User users

使用此命令,Accounts使用模式模块创建上下文。最后一个参数是模式模块的复数形式,它创建数据库表名和路由助手。生成器与生成器类似,不同之处在于它不接受要添加到模式的额外字段列表,并且它生成更多的上下文函数。Accounts.Usermix phx.gen.authmix phx.gen.htm``l

查看我们的终端,我们可以看到 Phoenix 生成了几个文件并更新了现有文件。稍后我们将查看其中的一些文件,尤其是文件,但让我们快速运行几个命令。lib/todo_app_web/router.ex

在您的终端中,运行:

mix deps.get

此命令更新您的应用程序依赖项。我们还需要更新我们的数据库以反映生成器所做的更改。phx.gen.auth

现在,运行这个命令:

mix ecto.migrate

如果我们检查在浏览器中运行的应用程序,我们可以看到生成器生成的Register和:Log inphx.gen.auth

在应用程序上注册,您应该会看到“用户创建成功”的弹出消息。

探索由创建的文件phx.gen.auth

让我们看一下由 . 创建的一些文件。phx.gen.auth

路由器文件已经存在,生成器只是向其中添加了几行代码:lib/todo_app_web/router.exphx.gen.auth

...

## Authentication routes

scope "/", TodoAppWeb do

pipe_through [:browser, :redirect_if_user_is_authenticated]

get "/users/register", UserRegistrationController, :new

post "/users/register", UserRegistrationController, :create

get "/users/log_in", UserSessionController, :new

post "/users/log_in", UserSessionController, :create

get "/users/reset_password", UserResetPasswordController, :new

post "/users/reset_password", UserResetPasswordController, :create

get "/users/reset_password/:token", UserResetPasswordController, :edit

put "/users/reset_password/:token", UserResetPasswordController, :update

end

scope "/", TodoAppWeb do

pipe_through [:browser, :require_authenticated_user]

get "/users/settings", UserSettingsController, :edit

put "/users/settings", UserSettingsController, :update

get "/users/settings/confirm_email/:token", UserSettingsController, :confirm_email

end

scope "/", TodoAppWeb do

pipe_through [:browser]

delete "/users/log_out", UserSessionController, :delete

get "/users/confirm", UserConfirmationController, :new

post "/users/confirm", UserConfirmationController, :create

get "/users/confirm/:token", UserConfirmationController, :edit

post "/users/confirm/:token", UserConfirmationController, :update

end

...

和称为插头。遵循他们规定的规则后出现的路线。:require_authenticated_user:redirect_if_user_is_authenticated

插件允许我们保护路由不被未经身份验证的用户访问,而插件允许我们防止经过身份验证的用户访问某些路由。:require_authenticated_user:redirect_if_user_is_authenticated

和插头都来自控制器::require_authenticated_user:redirect_if_user_is_authenticatedlib\todo_app_web\controllers\user_auth.ex

def redirect_if_user_is_authenticated(conn, _opts) do

if conn.assigns[:current_user] do

conn

|> redirect(to: signed_in_path(conn))

|> halt()

else

conn

end

end

@doc """

Used for routes that require the user to be authenticated.

If you want to enforce the user email is confirmed before

they use the application at all, here would be a good place.

"""

def require_authenticated_user(conn, _opts) do

if conn.assigns[:current_user] do

conn

else

conn

|> put_flash(:error, "You must log in to access this page.")

|> maybe_store_return_to()

|> redirect(to: Routes.user_session_path(conn, :new))

|> halt()

end

向我们的路由添加身份验证/tasks

目前,我们的路由不需要用户在访问之前进行身份验证。如果需要,我们可以将路由分成不同的 HTTP 方法。因此,只有一个访问所有方法的行:/tasks/tasksresource

resources "/tasks", TaskController

是相同的:

get "/tasks", TaskController, :index

post "/tasks", TaskController, :create

get "/tasks/new", TaskController, :new

get "/tasks/:id", TaskController, :show

get "/tasks/:id/edit", TaskController, :edit

put "/tasks/:id/update", TaskController, :update

delete "/tasks/:id/delete", TaskController, :delete

为了使这些路由需要用户身份验证,我们所要做的就是把插件放在resources后面::require_authenticated_user

scope "/", TodoAppWeb do

pipe_through [:browser, :require_authenticated_user]

...

resources "/tasks", TaskController

end

注销应用程序,然后尝试访问路由。您将被重定向到登录路由,并显示一条错误消息:http:localhost:4000/tasks

您只能在登录时访问这些路线。仅此而已!我们已经在 Phoenix 应用程序中实现了身份验证。

结论

在本教程中,我们学习了如何通过使用生成器为我们的应用程序生成身份验证来在 Phoenix 应用程序中实现身份验证,并了解它为我们提供的中间件。希望在本教程的帮助下,您可以使用 Phoenix 取得更多成就。phx.gen.auth

使用 Phoenix 进行身份验证相关推荐

  1. Web3Auth 筹集了 1300 万美元的 A 轮融资,通过简单的非托管身份验证基础设施推动 Web3 应用程序和钱包采用...

    我们很高兴地宣布,我们已经筹集了 1300 万美元,由 Sequoia Capital India.Union Square Ventures.Multicoin 和其他公司牵头,通过简单.安全和非托 ...

  2. ASP.NET MVC 4 (十三) 基于表单的身份验证

    在前面的章节中我们知道可以在MVC应用程序中使用[Authorize]特性来限制用户对某些网址(控制器/控制器方法)的访问,但这都是在对用户认证之后,而用户的认证则依然是使用ASP.NET平台的认证机 ...

  3. Facebook 与 Google 正在主导在线身份验证市场

    OpenID 公司 JanRain 的一项研究发现,用户在第三方网站进行身份验证时,最喜欢使用 Google 和 Facebook 的身份验证服务.Facebook 的验证服务 在媒体, 零售,技术等 ...

  4. 远程连接windows出现身份验证错误,提示由于CredSSP加密Oracle修正解决方案

    本机操作系统(OS版本:10.0.17134) 远程计算机操作系统(OS版本:6.3.9600) 远程连接的时候报错"出现身份验证错误,要求的函数不受支持.远程计算机:xxx 这可能是由于C ...

  5. 【WEB API项目实战干货系列】- API登录与身份验证(三)

    上一篇: [WEB API项目实战干货系列]- 接口文档与在线测试(二) 这篇我们主要来介绍我们如何在API项目中完成API的登录及身份认证. 所以这篇会分为两部分, 登录API, API身份验证. ...

  6. 技术图文:如何利用BigOne的API制作自动化交易系统 -- 身份验证

    背景 最近,自己在技术精进方向上有所犹豫,是往"网络渗透"的方向走呢?还是往"量化交易"的方向走? 如果选择精进"网络渗透",就需要学习各种 ...

  7. 公开课 | 旷视科技产品总监:计算机视觉如何赋能身份验证场景

    "刷脸"曾一度是人们互相调侃时的用语,如今早已深深地融入我们的生活.从可以人脸解锁的手机,到公司上下班的人脸识别打卡机,甚至最近有消息称北京地铁有望近期实现"刷脸&quo ...

  8. 利用IPSec实现网络安全之三(身份验证和加密数据)

    作者:许本新 在上两篇中我们一起讨论了关于利用IPsec实现禁用协议和端口的相关知识,其实IPsec真正能够让用户感觉到安全放心的功能并不局限于此,IPsec的功能是相当的强大,今天我们就继续来讨论如 ...

  9. 网络访问:本地账号的共享和安全模式设置身份验证后自动更改其他验证的处理方法 ...

    网络访问:本地账号的共享和安全模式 设置成为"仅来宾-本地用户以来宾身份验证"后自动更改成"经典:本地用户以自己的身份验证"的处理方法 我们为何要修改网络访问: ...

最新文章

  1. 用友 传入的 json 格式无效_用友网络股吧:被错杀的半导体材料龙头,全年或60%高增长,刚刚走出黄金坑...
  2. 粒子追踪 matlab,用粒子滤波器实现的多目标跟踪代码
  3. 实验中遇到的Quartus II的Warning的解释、原因以及解决方法
  4. SAP后台作业记录操作
  5. SpringData核心数据访问接口--CrudRepository示例
  6. java中椭圆类_Java中的Graphics2D类基本使用的教程
  7. 一步一步写算法(之克鲁斯卡尔算法 中)
  8. Chapter 1 First Sight——30
  9. C++中的类加多线程代码修炼之二
  10. BBIAB的完整形式是什么?
  11. 玩转keybd_event
  12. 基于树莓派2代的DIY无线路由器
  13. Python检查模块
  14. 部署LNMP高可用负载群集
  15. RequestContextHolder 获取 ServletRequest 和 ServletResponse,Spring MVC ModelAndView 数据响应 Response
  16. hql懒加载后判断对象是否存在_JPA数据懒加载LAZY和实时加载EAGER(二) - Mr.Simm - 博客园...
  17. 这么有料的福利,你还不赶紧关注一波吗?(代码合集)
  18. clark变换和park变换【1】
  19. lg相乘公式_ln公式(lg公式大全)
  20. 跨境电商erp管理系统

热门文章

  1. Python都纳入新课标了,你还不知道它是什么?
  2. 中国高钛渣行业产业投资分析及需求前景预测报告2022-2027年
  3. linux grub详解
  4. win10下Visual Studio 2012 update4、AutoCAD 2016和二次开发插件ObjectARX2016环境安装及配置
  5. centos7服务器死机解决方案
  6. LTE射频拉远单元数字中频方案(七)
  7. axios请求数据和拦截
  8. Android性能优化来龙去脉总结,移动端h5页面适配
  9. RS232串口电路设计
  10. python 图像iou_openCV——裁剪人的图片及iou自适应标签