Addict.Helper实用教程:快速获取current_user并判断登录状态的3个技巧 Addict.Helper实用教程快速获取current_user并判断登录状态的3个技巧【免费下载链接】addictUser management lib for Phoenix Framework项目地址: https://gitcode.com/gh_mirrors/add/addictAddict 是一个专为 Phoenix Framework 打造的用户管理库帮你轻松实现注册、登录、登出和密码重置。其中的Addict.Helper模块是最实用的辅助工具——只需传入一个conn就能快速获取当前登录用户current_user并判断登录状态is_logged_in。本教程面向新手通过 3 个简单技巧带你在控制器和模板中优雅地取出当前用户、判断是否登录告别手动翻 session。 为什么需要 Addict.Helper在 Phoenix 里登录成功后Addict 会把用户信息存进 Session 的current_user键中。如果直接手写Plug.Conn.get_session(conn, :current_user)既啰嗦又容易出错。Addict.Helper把这套逻辑封装成了两个函数见 lib/addict/helper.ex函数作用返回值Addict.Helper.current_user/1取出当前登录用户用户 Map未登录返回nilAddict.Helper.is_logged_in/1判断是否已登录布尔值true/false 一句话记住current_user拿人is_logged_in拿状态。技巧一一行代码取出当前用户 current_user在模板或视图里直接调用Addict.Helper.current_user(conn)即可拿到当前用户。示例应用的首页就是这样做的example_app/web/templates/page/index.html.eex% if Addict.Helper.is_logged_in(conn) do % Hi, % Addict.Helper.current_user(conn).email %! % else % You are not logged in. % end %登录后页面会显示Hi, xxxxx.com!未登录则显示提示语。current_user 返回的是什么这里有个重要细节Addict 存入 Session 的并不是完整的 Ecto 模型而是一个瘦身版的 Map。登录时它会通过Addict.Presenter.strip_all/2lib/addict/presenter.ex剔除所有关联字段associations__struct__、__meta__敏感的encrypted_password字段所以current_user返回的是一个干净、安全的 Map直接读.email、.name等字段即可不用担心把密码泄露到前端。技巧二用 is_logged_in 判断登录状态is_logged_in/1返回一个布尔值非常适合在模板里做条件渲染比如根据登录状态切换导航菜单% if Addict.Helper.current_user(conn) do % lia href# classlogout-link退出登录/a/li % else % lia href/register注册/a/li lia href/login登录/a/li % end %你也可以在视图模块里封装一下让模板更干净。示例应用的写法example_app/web/views/user_management_view.exdef current_user(conn), do: Addict.Helper.current_user(conn) def is_logged_in(conn), do: current_user(conn) ! nil技巧三用 Authenticated Plug 保护页面前两个技巧解决取数据最后一个技巧解决拦截未登录用户。Addict 提供了Addict.Plugs.Authenticatedlib/addict/plugs/authenticated.ex挂在控制器上即可自动拦截defmodule ExampleApp.PageController do use ExampleApp.Web, :controller plug Addict.Plugs.Authenticated when action in [:required_login] def required_login(conn, _params) do render conn, required_login.html end end用户已登录Plug 会把current_user赋到conn.assigns.current_user模板里可直接用current_user。用户未登录自动重定向到登录页默认/login可在配置里改not_logged_in_url。✅ 好处业务代码里不用再写if is_logged_in(...)判断访问控制交给 Plug 统一处理更安全也更省心。⚠️ 常见坑与最佳实践别忘了传 conn两个函数都必须传入 conn在模板里是conn在控制器里是conn。未登录返回nilcurrent_user未登录时返回nil直接取.email会报错建议先用is_logged_in判断。别把 current_user 当 Ecto 模型用它没有关联和__struct__无法repo.preload。页面保护优先用 Plug需要未登录直接跳转的页面用AuthenticatedPlug 而非在视图里判断。 小结场景推荐做法取出当前用户Addict.Helper.current_user(conn)判断是否登录Addict.Helper.is_logged_in(conn)保护页面plug Addict.Plugs.AuthenticatedAddict.Helper用两个函数就解决了 Phoenix 项目里最频繁的两个需求——取当前用户和判断登录状态。配合AuthenticatedPlug你就能在应用里轻松搭出一套清晰、安全、易维护的用户管理逻辑。【免费下载链接】addictUser management lib for Phoenix Framework项目地址: https://gitcode.com/gh_mirrors/add/addict创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

最新新闻

AI科研工具实用指南:高效助力科研人员提升研究效率与创新产出的实用工具汇总

AI科研工具实用指南:高效助力科研人员提升研究效率与创新产出的实用工具汇总

每次找到心仪的外国文献,却被付费墙冷冷地挡在外面,是不是感觉科研的热情瞬间被浇灭?作为学生党,我太懂这种无力感了。但好消息是,通过几个合法且免费的“通道”和技巧,我们完全能实现“文献自由”。今天分…

2026/8/24 19:23:25
人形机器人驾驶卡丁车:从ROS2控制到传感器融合的完整实战指南

人形机器人驾驶卡丁车:从ROS2控制到传感器融合的完整实战指南

最近在机器人控制领域,一个非常有趣的挑战是如何让机器人完成复杂、动态且需要实时反馈的任务。传统的工业机械臂在固定环境中表现出色,但当面对像驾驶卡丁车这样需要平衡、转向、油门控制以及环境感知的综合性任务时,就力不从心了。这正是人…

2026/8/24 19:23:25
研究生开题全流程指南 选题方向梳理与汇报准备实用技巧汇总

研究生开题全流程指南 选题方向梳理与汇报准备实用技巧汇总

每次找到心仪的外国文献,却被付费墙冷冷地挡在外面,是不是感觉科研的热情瞬间被浇灭?作为学生党,我太懂这种无力感了。但好消息是,通过几个合法且免费的“通道”和技巧,我们完全能实现“文献自由”。今天分…

2026/8/24 19:23:25
伪随机数生成器mt19937与分布(distribution)原理及工程实践

伪随机数生成器mt19937与分布(distribution)原理及工程实践

1. 为什么“随机数”不是随便写个rand()就完事?——从游戏卡顿、模拟失真到密码漏洞的底层真相 你有没有在写一个简单的贪吃蛇游戏时,发现蛇的转向总在某个方向上“偏爱”?或者用Python的 random.randint(1, 6) 掷骰子,连续五次…

2026/8/24 19:23:25
Win10 Docker镜像迁移实战:save/load避坑指南

Win10 Docker镜像迁移实战:save/load避坑指南

1. 这不是“复制粘贴”,而是生产环境镜像迁移的实操现场 在 Windows 10 上用 Docker Desktop 跑着一个调试了三天的 Python 数据分析服务,同事新配的笔记本还没装环境,老板催着下午就要把整套服务迁过去跑通——你打开命令行,敲下…

2026/8/24 19:23:25
Java并发锁机制深度解析:从synchronized到ReentrantReadWriteLock

Java并发锁机制深度解析:从synchronized到ReentrantReadWriteLock

1. 从一把锁到多把钥匙:为什么我们需要不同的锁机制?如果你写过一段需要被多个线程同时访问的代码,比如一个共享的计数器或者一个用户余额的缓存,那你大概率已经和synchronized打过交道了。它就像一把最简单的锁,谁先拿…

2026/8/24 19:18:25