7月快乐
7月快乐。
逐渐适应了实训生活。生活变得平静。偶尔还是会很难过。
7月快乐。
逐渐适应了实训生活。生活变得平静。偶尔还是会很难过。
可以把 LoadCurrentUser 分成两种状态来处理:
核心思路是:LoadCurrentUser 只负责“尝试加载”,不要默认把所有异常都 401 掉。
可以这样做:
func LoadCurrentUser(db *gorm.DB) gin.HandlerFunc {
return func(c *gin.Context) {
sessionID, err := c.Cookie("session_id")
if err != nil {
c.Next()
return
}
if sessionID == "" {
c.Next()
return
}
var session models.Session
if err := db.Where("session_id = ?", sessionID).First(&session).Error; err != nil {
c.Set("authError", "invalid_session")
c.Next()
return
}
if session.RevokedAt != nil || (session.ExpiresAt != nil && session.ExpiresAt.Before(time.Now())) {
c.Set("authError", "expired_session")
c.Next()
return
}
var user models.User
if err := db.Preload("Roles.Permissions").First(&user, session.UserId).Error; err != nil {
c.Set("authError", "user_not_found")
c.Next()
return
}
c.Set("currentUser", user)
c.Set("sessionId", sessionID)
c.Next()
}
}然后 RequireAuth 再决定怎么报错:
func RequireAuth() gin.HandlerFunc {
return func(c *gin.Context) {
if user, ok := c.Get("currentUser"); ok && user != nil {
c.Next()
return
}
if authErr, ok := c.Get("authError"); ok {
c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"msg": authErr})
return
}
c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"msg": "unauthorized"})
}
}这样效果就很清楚:
公共接口:
私有接口:
本质其实就是把报错信息放到上下文,然后给需要经过auth中间件的路由去拦截,如果不会经过auth中间件就放行。
社团工作:
比赛:
保研:
依旧迷茫,处于保研和工作之间摇摆。其实主要是出于继续比赛和出去实习之间摇摆。可能是社团工作确实比较多,这学期一直想的是赶紧交接工作。好在虽然我看人眼光一直不怎么样,这次的运气似乎还挺不错。遇到了两个还算是挺负责的人,挺好。acm那边基本上是退休了,后面就跑到io去养老。不过这学期有本科生科研招募,io那边的老师招了一批人,准备搞一些机器狗机械臂相关的项目,我也不知道能不能接着待下去。虽然我是负责人,但是遇到对我来说比较陌生的领域还是有点打怵,我本来过去是打算做做软件开发的外包,现在的情况有点出乎我的意料。其实我一直喜欢io就是因为我的朋友都在那边。不过玩的特别好的其实也就几个。学长都毕业了,ylx和山东人大概也马上大四不在实验室。谢bro和广东人大概准备去做电子硬件方向的实验室,语语一直在工创中心。我有点害怕到时候io只剩我一个人,到时候就是面对的都是陌生面孔,可能也不想去了。其实我不是想去养老,我应该只是想呆在那一批人身边。不过每个人都有自己要做的事情,我也一样,如果这次有遇到合适的日常实习我大概率下学期也不在学校。时间过得好快。大一的时候还是跟在别人后面,对大学生活充满了陌生和不适应。现在也已经构筑好了自己的人际关系网,不会觉得太孤单,对自己的发展也有了笼统的想法和一点点的规划。不过刚刚有起色的时候就又要分别多少还是难受的。祝愿大家都有光明的未来。

在obsidian的第三方插件市场搜索 agent 。然后安装
这个插件主要用到了acp协议
ACP (Agent Client Protocol) 是由 Zed Industries 开发的开放协议,旨在标准化编辑器与 AI Agent 间的通信。它通过 JSON-RPC 消息传递,将编辑器(如 Obsidian)与 AI Agent(如 Claude Code)解耦。
看官方文档安装一下
https://rait-09.github.io/obsidian-agent-client/agent-setup/codex.html
npm install -g @zed-industries/codex-acp
然后在设置里面第一步将default agent改为codex
然后第二步设置 node.js path 那边点一下 auto detect 会自己找到对应的cmd程序
之后就可以使用了
之前claw的jp路线非常不错,至少用起来很舒服。后面claw清退了就用回racknerd。只能说用了细康换回racknerd就很难受了。
这几天一直在nodeseek刷替代品。刚好刷到breadcloud做活动。就一上头买了。只能说还是jp用起来舒服。ip也很干净,回到以前的感觉了,太好了。