I was having a similar problem so I inserted some of the code from the news module into the calendar add pages:
if { $user_id == 0 } { ns_returnredirect "/register/index.tcl?[export_url_scope_vars] &return_url=[ns_urlencode [ns_conn url]]" return }
It may not be correct, but it does prompt the user to either login or register if they aren't currently.
See also https://openacs.org/forums/message-view?message_id=16959 for what I was trying to do.